From patchwork Fri Feb 23 13:58:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46460 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992199pze; Fri, 23 Feb 2024 06:31:52 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUKk7SHRYlJYlstYzLc+ZYwfzYxyF6Gn1sMCSWJ1yFMA9PxGkbGh9XePi+X0TPAzHPGBl3Bmt3QGANNNTzUW1XbwpvfxKMkQI/pSA== X-Google-Smtp-Source: AGHT+IHMRwKSlS4/zq7/JdkgbI0mw08adzblHuFyjhTZu+xpWyr6GLbiTg73J+Fb2QTwTScS8SxP X-Received: by 2002:a17:906:3109:b0:a3f:161b:cc13 with SMTP id 9-20020a170906310900b00a3f161bcc13mr1316321ejx.7.1708698711831; Fri, 23 Feb 2024 06:31:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698711; cv=none; d=google.com; s=arc-20160816; b=pBGCeUlIDFPOxhDsLKtf5q10QovNDgiGPQx/ihnFAY+bu6aXE9JUSSIghhDX6GJBJ2 gb33W1y17z1ZzOUYG9crKKLsvf2bOXlt1j+Tfz/sOYXIwxlgUDeSaUuN6CZrNzzVVLoB V5bd/WSLskKH09Ra3yJVOr5oczRPTcvwd07F4dWo1dQ6rPJ0HFTKqZ2IuEJ/NQ7bEmjq 703FKPL3BvLCjqnrZio0i8S3CdqHSR1ZYr+v/kM7o8iKFXWTba4zHkLWN5M/F3ZJIOYh CnVgCnO/sYU6/8VJMuK0DU6Uw3G3cPX+7XqU9mAqQL41nXVZcdmLhDEU7nvIAXuv5+f2 DFyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=KeOVlLqGUNflFFQoVDK5XujDaVOO+idIUvKcHZ06b3o=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=bxCFxJ0khY9v9MAWEc/XIJsxXXaG+ZiLtbA69SyikyFlc9mo8RDAsc8m0bMXwhLlBc 5SgjGsowb2pLE3k16w1D+b80F9FJ+DFrec3fbz0Hzqr+HyoVTOTfSYvjrNeAzbk1X8qI w6pdPDaoY6f+YtHYGraf/dNEFTuin60Ubm9N9ZlRtf8+u9AspSJRXl40vpINKxmdNbTY uLlFRk0MLuzMRIboOePCCkPYpuRcmu8KE6q8xmbkoToeAGG19G4iCKoJFu/W6bvJJuJU +x6RZZiwnXq7ja29acdGOxuLTcC29U08Q1f3NS1geHKAEfVdpS3vfpct7k3eBwGkz7zc xgmA==; 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="gUuha/6i"; 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 u12-20020a170906124c00b00a3e36bcb156si5667898eja.114.2024.02.23.06.31.51; Fri, 23 Feb 2024 06:31:51 -0800 (PST) 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="gUuha/6i"; 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 1F49F68C620; Fri, 23 Feb 2024 16:31:38 +0200 (EET) 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 EF82568C5E7 for ; Fri, 23 Feb 2024 16:31:29 +0200 (EET) 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=gUuha/6i; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 862C04492 for ; Fri, 23 Feb 2024 15:31:29 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id Y3J1CdAUuK3F for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=8oYw8yJ4LcKDwAN70h9sG1ZtRrVNz00BkniMJ9/e8S0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=gUuha/6i+udxBsBsEmsE/PcQCDGFpDL3osbENWM39L8NBwrc/6/wT7DoDA2j4bBwJ m2jZ2tlwrMlz3NwMn/jLUu3SkgjIl0/6rCvuFnoU9Dn7veMVppVsPcm5LboaMxqegx +YH/U5qSMG9v9GVv47nXFr9o17+92P3NMHK3Nu9tQ/Uc9hX/ttg8ziIm0mg5uRII4t 7HCRLIp7XmZOnk0vV8/ybLKC+3gZzEAAZU/ak97TqbVb+jF1AK0Y6tppvC3okQ/75t KwKGmLjmCLxU4Zbr7KZSAMJTqtvvnmW3+pO0cZ4UtGgLehObUB+iYkwosGvUalDisN zRuv7VcPB+l0w== 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 38C2B448A for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id D213C3A0582 for ; Fri, 23 Feb 2024 15:31:21 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:23 +0100 Message-ID: <20240223143115.16521-2-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/38] lavu/opt: cosmetics, change option flags to (1 << N) style 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: TZ3q1oxXEaWC It is easier to read. Also, change their doxy comments to use the same style. --- libavutil/opt.h | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/libavutil/opt.h b/libavutil/opt.h index 461b5d3b6b..6ed3407b09 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -278,25 +278,49 @@ typedef struct AVOption { double max; ///< maximum valid value for the option int flags; -#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding -#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding -#define AV_OPT_FLAG_AUDIO_PARAM 8 -#define AV_OPT_FLAG_VIDEO_PARAM 16 -#define AV_OPT_FLAG_SUBTITLE_PARAM 32 + +/** + * A generic parameter which can be set by the user for muxing or encoding. + */ +#define AV_OPT_FLAG_ENCODING_PARAM (1 << 0) +/** + * A generic parameter which can be set by the user for demuxing or decoding. + */ +#define AV_OPT_FLAG_DECODING_PARAM (1 << 1) +#define AV_OPT_FLAG_AUDIO_PARAM (1 << 3) +#define AV_OPT_FLAG_VIDEO_PARAM (1 << 4) +#define AV_OPT_FLAG_SUBTITLE_PARAM (1 << 5) /** * The option is intended for exporting values to the caller. */ -#define AV_OPT_FLAG_EXPORT 64 +#define AV_OPT_FLAG_EXPORT (1 << 6) /** * The option may not be set through the AVOptions API, only read. * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. */ -#define AV_OPT_FLAG_READONLY 128 -#define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering -#define AV_OPT_FLAG_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime -#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering -#define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information -#define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects +#define AV_OPT_FLAG_READONLY (1 << 7) +/** + * A generic parameter which can be set by the user for bit stream filtering. + */ +#define AV_OPT_FLAG_BSF_PARAM (1 << 8) + +/** + * A generic parameter which can be set by the user at runtime. + */ +#define AV_OPT_FLAG_RUNTIME_PARAM (1 << 15) +/** + * A generic parameter which can be set by the user for filtering. + */ +#define AV_OPT_FLAG_FILTERING_PARAM (1 << 16) +/** + * Set if option is deprecated, users should refer to AVOption.help text for + * more information. + */ +#define AV_OPT_FLAG_DEPRECATED (1 << 17) +/** + * Set if option constants can also reside in child objects. + */ +#define AV_OPT_FLAG_CHILD_CONSTS (1 << 18) //FIXME think about enc-audio, ... style flags /** From patchwork Fri Feb 23 13:58:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46461 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992306pze; Fri, 23 Feb 2024 06:32:02 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXSLiLaCL9zN4glwjqka6PetdPXcYg6dMP8Ob5jVBCaM+smU/fKbknWJg3XbhKWHOW2YXbuncuoAGE9NNx8CiYE5dej8NUuVWxpGQ== X-Google-Smtp-Source: AGHT+IEI62FGZyaOwDlFw120gWpFdqTv+nkCuP+uJSgGPf1/8Jg3l98qjEwvgNCVZpNsKuiCESop X-Received: by 2002:a17:907:174a:b0:a3f:2ffd:c683 with SMTP id lf10-20020a170907174a00b00a3f2ffdc683mr1447584ejc.62.1708698722640; Fri, 23 Feb 2024 06:32:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698722; cv=none; d=google.com; s=arc-20160816; b=Uo6U/WNSFTd45sBUFyp27sNq5dC1H7TX/9r49AWs6xb7OIAvRgGOg8Yvqd2DhL/d7y Ov/pOKuNjoHEDQBmXRbzprUBk0x/dUkOaWNZgwBny55Tm5TEgtFjT4tx74fcMOEoPhxW BhVYf75rSZPT3tSqOCJ5rZEy+xh6UudQKT0Kvr+wZgzUAZTmHDN9eO+yUpZS39RfazEl ZFrMrnqxM4p0VKnCFdmFE514LdJDJ/qxselDEnLv4VFePZgKszHEvnEs8u6vIMfc5Koe Lf3zrM26turSY9XOQ/JUSU78omPNIyef2xvZm57OpUBxY35+b+KyrjKW8MIYfsJK1Kdy 8Lrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=rFfh24wDvWkuR8U2DOHpFBPmX5eVVGIo9ez8XZX9HnQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=1KjPlGE48ia2vwlUomf2G2pT2Yd+4lrX+xRUaZQRsbYVlpY1M4+sJi0exOnLdlUuIb d8bjdNCb6f/+qvMKRBWv5xmD7cLBihsNFkI/xsZL3ULuZtDX+XU61Gx2EgTymdeJWTGZ NuqvtAK4pc7OVciicY+mARZJLefoTELgUSlYYLwOGsjvV8DRTMwo5K05M0e1O+F+fQ1Y JVI6TpQj+3QVv9Q8sHs09YcEx4kykQtyiF/Ilhv94IOYlxhbltCxRS1duMPbXDQJobXw pLwfqAPOn1as0F723yxKpsjrufrxmaJezUNZ8boeqomQNho85KzVvPrbxEJbgQ4aPoCt R60A==; 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=Fe4UNYz5; 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 c26-20020a170906341a00b00a3f4ca8f94asi2129303ejb.14.2024.02.23.06.32.02; Fri, 23 Feb 2024 06:32:02 -0800 (PST) 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=Fe4UNYz5; 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 35C9068C769; Fri, 23 Feb 2024 16:31:39 +0200 (EET) 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 2BF0668C5E7 for ; Fri, 23 Feb 2024 16:31:30 +0200 (EET) 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=Fe4UNYz5; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id CFC394D3F for ; Fri, 23 Feb 2024 15:31:29 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 9o9s7AWPnEyf for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=bkerlOumN677HTD1C3BkVHPJgU+obZDE994OJszR6Ug=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Fe4UNYz5RnYaxa4FU4coGeje4zPXdkKlaahFKNz+T3G5/sNZoBPxb2l6mBJVp+oHQ r0ZumP4u2OjWQq4a91SZ7oBvVnVC9Gs9M7I4HrxvQmaf2MDFot7PaOaSdQrfTbqdMM 2CRyVxOYqaXZC72+5ssDvi7B5xqwEdyOQ4/VwlEwZObVZ1puzpFjiE4JCDuwJaIDS1 y82bxZGk3s1HykXV4mgYIrovM8WHeq0eMOa772Wq5typ8eYTQ/Ug3wLEwvsWraalA3 MDWHl3NY5mL/w2bCY7BAw9LyiBzyv6eLy0ntnT/MLTTPgW5WrWB0n/9O5Fm6G8Qc0Q 1YeXQnOEPo6MQ== 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 3D4D34CFF for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id DD0933A076E for ; Fri, 23 Feb 2024 15:31:21 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:24 +0100 Message-ID: <20240223143115.16521-3-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/38] lavu/opt: cosmetics, move AV_OPT_FLAG_* out of AVOption 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: Ce0hGlZnZaUz Also drop an obsolete FIXME. --- libavutil/opt.h | 69 ++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/libavutil/opt.h b/libavutil/opt.h index 6ed3407b09..36e28249ee 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -245,40 +245,6 @@ enum AVOptionType{ AV_OPT_TYPE_CHLAYOUT, }; -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - int flags; - /** * A generic parameter which can be set by the user for muxing or encoding. */ @@ -321,7 +287,40 @@ typedef struct AVOption { * Set if option constants can also reside in child objects. */ #define AV_OPT_FLAG_CHILD_CONSTS (1 << 18) -//FIXME think about enc-audio, ... style flags + +/** + * AVOption + */ +typedef struct AVOption { + const char *name; + + /** + * short English help text + * @todo What about other languages? + */ + const char *help; + + /** + * The offset relative to the context structure where the option + * value is stored. It should be 0 for named constants. + */ + int offset; + enum AVOptionType type; + + /** + * the default value for scalar options + */ + union { + int64_t i64; + double dbl; + const char *str; + /* TODO those are unused now */ + AVRational q; + } default_val; + double min; ///< minimum valid value for the option + double max; ///< maximum valid value for the option + + int flags; /** * The logical unit to which the option belongs. Non-constant From patchwork Fri Feb 23 13:58:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46492 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp997510pze; Fri, 23 Feb 2024 06:41:30 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWYA00m9xJ997RZHHvi2p6j9+TTcr2QOIKaSsc9/0chbuBxN7JMPizMgquvAH90TgeBhRoxRnxDEgekeIClXg1FJ8ZeOU+pRER+Rg== X-Google-Smtp-Source: AGHT+IGRsp8Io/k9ZJpOnL212kB9FRstaXhoHO+hXc3o9hNXXs0DNrFAbbNeKrIVVSdRjMX01y7g X-Received: by 2002:a05:6512:3c97:b0:512:dab0:8b1f with SMTP id h23-20020a0565123c9700b00512dab08b1fmr10609lfv.7.1708699290552; Fri, 23 Feb 2024 06:41:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708699290; cv=none; d=google.com; s=arc-20160816; b=oAry58pCLQVhClWXe9spgb2LrYs7sT5fek51ilAJ0ec/cGEQMJjEX4zY90MLo3DcbC ye+cev5uaV4KPNE0zrXWGHt1vwA5GocVMvyyX9psNxob7ErNkPJ4kB7/mnoSws3fSFAt HEi7VtiM56k/QHrj6uO6OjVmA/cEO6zO0elVshfy4vMqdk4TlNCLd4e/p4ea7oxR/gUJ ElzsbKr9gVt/E4QHkUsIMecffgKb3kYK6Lz6pS4TXWfBvrM8xojqubc5mUBHUL8hM93I wUx06i1cX4QNpgBD4nKNxQ4A8m06xQsM5yeWYaPAmXCdO4094omt8WWjV8NPAqRJ87bP Io3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=kNObtZHosA2KvifoWxy6HUChdOkROPnGSMPRGNvQEm8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=DQHV7wSxJjA6quX/Xwvpf5toA51JuZHDealdE1E3EwAysumX/RY7VWBvrE0W+iop/A r/4R8eCDwjHV+bVLOe9kVuSsf1FdL1BOeskMUi7h29BY/tY4R+zDcW8pWN4JtQymgWKx pinfslFRU4jZK4RcJjAGkgAdYIQp/8bLtgdBNQ846nafdNhTPNk4Jj2ne2N18aVRdwAS fsgvopXiCVWdrPAUvHLSOWwgkbacIe3TaYIcs8yAVEe+75kwxf8extrzb14mq+llbfRI 7WGLkX9LT1V+x/B32Ysoc+7WBrPZpNWRsBKXp2VErw3/hkRfKMiTPTNy/vSESC0H1e7c OEDA==; 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=Udf75FSj; 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 j8-20020aa7c408000000b00564267a0b71si6095183edq.630.2024.02.23.06.41.29; Fri, 23 Feb 2024 06:41:30 -0800 (PST) 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=Udf75FSj; 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 3148168C719; Fri, 23 Feb 2024 16:41:27 +0200 (EET) 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 C9EFB68C66E for ; Fri, 23 Feb 2024 16:41:20 +0200 (EET) 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=Udf75FSj; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 6A90A4D24 for ; Fri, 23 Feb 2024 15:41:20 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 2GdWGLH8trwM for ; Fri, 23 Feb 2024 15:41:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708699279; bh=gdv3c6Mlbz7jzJDOcRYs+GZP4czeDhja5jlYJzP6Y7E=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Udf75FSjY8nloDEGH0CrVF7COrO9FXT7LfS8sh7WAmT6ziv0wJBL+hAjSTK9viHzW mupeK6FAkgBCmsgvi6SlqszvTDgds4on9OQTnOINNQrraN4Th68yTRANWCNND03vwJ FR7WbVPQ9oSQdkE+BVDWnN4ODZLIXPLlDardVOGaF0CUxoewzC7rtMaJ76BHBa9pqm i3DQlSl7pJxdzn7EDknQbrtl89A9al84WcWQrlom39w19Q2vz3rIobn22H9KxDthlC dW5w/fM5dca+nBIxqkh7T2syc/9+RIJqnWBoFHSmO/ZGC1XCFYSRNyA4X4iut4R9wb MoZLMvPVqmSIA== 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 BF16C448A for ; Fri, 23 Feb 2024 15:41:19 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id E8F433A0819 for ; Fri, 23 Feb 2024 15:31:21 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:25 +0100 Message-ID: <20240223143115.16521-4-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/38] lavu/opt: document AVOption.flags 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: ZwgWZeQHnx7y --- libavutil/opt.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavutil/opt.h b/libavutil/opt.h index 36e28249ee..d72d65052f 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -320,6 +320,9 @@ typedef struct AVOption { double min; ///< minimum valid value for the option double max; ///< maximum valid value for the option + /** + * A combination of AV_OPT_FLAG_*. + */ int flags; /** From patchwork Fri Feb 23 13:58:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46496 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp997738pze; Fri, 23 Feb 2024 06:41:55 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXnx7q9d/2hsxhMLNO0hcwxxznDwDfBmx1hiSktqQpQhRuL04W+3JVSxqRa37bz1Anm4gScS+SgMB9Fxg+YlHzj5utoaB7wxqQVhA== X-Google-Smtp-Source: AGHT+IH/o/H7HmlbRMNV4rlAy3vSRC1a8mMkfiPFhITMgk+npvpbCWmbJcaE2nfza5jvQN+FCuZG X-Received: by 2002:a50:9549:0:b0:565:4b6e:7f71 with SMTP id v9-20020a509549000000b005654b6e7f71mr28062eda.3.1708699314971; Fri, 23 Feb 2024 06:41:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708699314; cv=none; d=google.com; s=arc-20160816; b=I/WfS0cI4u6+cJ5cvd/JSgCKxFxQ/zgnvrX7FemoKj3c/dqgOflJzjPheXsnYTQkq6 von6IcvIDXg5tyz6909Zm/SNR25Q8PvoJr2m0MTdkzm9G8zPIIFZ0l17l0RT/TWguqiG OXcwj8iY1FIe+PVsd/uwFiQCCPPZwRc9h+8vJVOHXXDqQ0q74MOjDgOTjJTVIG+yw9mH shgrGg1ZcCQxi5UxU/ZeHcDrxaSEOctFbQdltA2kAsR7Pj1J4mAtMWoQROrnATStTpew /M03TzpqEf2+4mT4JqW296csNeulmwPloopCO55qI78PZC/cmg0hRbk2EU9Ueic722zB Lo5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=W9PoXwySiSVJouVln+CAeh7eIl/wXsi7LtV0IxxUfAo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=E8hOoT/L8Pqb6ODCL5D9K9hckDoc0vhAQIYqKGu14hNpGCZ6I7OPfNN/2YLu8DLwBC Mbi3gdIQFh5hp6waq0gamNIZQq7Rm9RFXbCtRF5QWphlXbqgOga0CxZ3z2tVAwR+ItPK tIuL9oeylGAnc2ZCdq4WlOWhwwX/NKnm8sLAW6aeMPiwKTegiiYZO3AygRrH0+gGqQM4 D3SKc4xq8MI082hDH/SFpU5y1NmCl/x7t5UsLa/U/1p+HoCVXOfWyQWLR4bIcV3wRFOz nlwYyqzm8LUfCOr1lelUDSxbHHCSUhSmyiRFAHEf7dZrVz3msXTz4STqVoKfoC56yB9a b8FA==; 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=iahQfbFC; 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 dz20-20020a0564021d5400b0056575a72210si499606edb.74.2024.02.23.06.41.54; Fri, 23 Feb 2024 06:41:54 -0800 (PST) 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=iahQfbFC; 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 806AC68C692; Fri, 23 Feb 2024 16:41:30 +0200 (EET) 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 972F468C678 for ; Fri, 23 Feb 2024 16:41:21 +0200 (EET) 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=iahQfbFC; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 473EC448A for ; Fri, 23 Feb 2024 15:41:21 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id Qt6vp1CweIf8 for ; Fri, 23 Feb 2024 15:41:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708699279; bh=8e/icOLdTBa1/VP1MgDhxPKTvK/DEUI/hWvYZ0BXRQs=; h=From:To:Subject:Date:In-Reply-To:References:From; b=iahQfbFC9+fPCDXr5iyAGwq8yweciWSy3Hk102H9is1x/xHlXAY/tfms7I2wtiDsC fbo2iPnOnjTVOTZRFGsNe+ey7so8S7cFXQF9X0gyUvoovEaixdjXvL7In0Mu5SnKX5 MtGy8bSdlIp2kEQT1cRKFaMnYTiXjfXwwz0wt+ZAzFn/ikbzExJyQP5M23Ac6NluVC vElYSFx6IQ5M/cr1+aHzTiVMtr7vD4tNkqNWsWqx9ByxAHXs1759Q9C60ei9fcTMNM KNQV8oWR6KZWpZf6TDnomc+vFz0kZTyPFrdDhGpiRXmdDHLnmMvMzcTBXUODroZFaM wOEW4wHv/r4Ow== 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 C28864CFF for ; Fri, 23 Feb 2024 15:41:19 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0073C3A0C79 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:26 +0100 Message-ID: <20240223143115.16521-5-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/38] lavu/opt: cosmetics, group (un)init and management functions together 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: RzaTD9Nb0SsU --- libavutil/opt.h | 336 +++++++++++++++++++++++++----------------------- 1 file changed, 173 insertions(+), 163 deletions(-) diff --git a/libavutil/opt.h b/libavutil/opt.h index d72d65052f..e2b6ba1f35 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -402,15 +402,9 @@ typedef struct AVOptionRanges { } AVOptionRanges; /** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options + * @defgroup opt_mng AVOption (un)initialization and inspection. + * @{ */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); /** * Set the values of all AVOption fields to their default values. @@ -430,161 +424,37 @@ void av_opt_set_defaults(void *s); */ void av_opt_set_defaults2(void *s, int mask, int flags); -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_opt_set() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); /** * Free all allocated objects in obj. */ void av_opt_free(void *obj); /** - * Check whether a particular flag is set in a flags field. + * Iterate over all AVOptions belonging to obj. * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. + * @param obj an AVOptions-enabled struct or a double pointer to an + * AVClass describing it. + * @param prev result of the previous call to av_opt_next() on this object + * or NULL + * @return next AVOption or NULL */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); +const AVOption *av_opt_next(const void *obj, const AVOption *prev); /** - * Set all the options from a given dictionary on an object. + * Iterate over AVOptions-enabled children of obj. * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() + * @param prev result of a previous call to this function or NULL + * @return next AVOptions-enabled child or NULL */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - +void *av_opt_child_next(void *obj, void *prev); /** - * Set all the options from a given dictionary on an object. + * Iterate over potential AVOptions-enabled children of parent. * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} + * @param iter a pointer where iteration state is stored. + * @return AVClass corresponding to next potential child or NULL */ +const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); #define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the given object first. */ @@ -659,31 +529,171 @@ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, int opt_flags, int search_flags, void **target_obj); /** - * Iterate over all AVOptions belonging to obj. + * Show the obj options. * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL + * @param req_flags requested flags for the options to show. Show only the + * options for which it is opt->flags & req_flags. + * @param rej_flags rejected flags for the options to show. Show only the + * options for which it is !(opt->flags & req_flags). + * @param av_log_obj log context to use for showing the options */ -const AVOption *av_opt_next(const void *obj, const AVOption *prev); +int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); /** - * Iterate over AVOptions-enabled children of obj. + * Extract a key-value pair from the beginning of a string. + * + * @param ropts pointer to the options string, will be updated to + * point to the rest of the string (one of the pairs_sep + * or the final NUL) + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @param flags flags; see the AV_OPT_FLAG_* values below + * @param rkey parsed key; must be freed using av_free() + * @param rval parsed value; must be freed using av_free() + * + * @return >=0 for success, or a negative value corresponding to an + * AVERROR code in case of error; in particular: + * AVERROR(EINVAL) if no key is present * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL */ -void *av_opt_child_next(void *obj, void *prev); +int av_opt_get_key_value(const char **ropts, + const char *key_val_sep, const char *pairs_sep, + unsigned flags, + char **rkey, char **rval); + +enum { + + /** + * Accept to parse a value without a key; the key will then be returned + * as NULL. + */ + AV_OPT_FLAG_IMPLICIT_KEY = 1, +}; /** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param iter a pointer where iteration state is stored. - * @return AVClass corresponding to next potential child or NULL + * @} + */ + +/** + * Parse the key/value pairs list in opts. For each key/value pair + * found, stores the value in the field in ctx that is named like the + * key. ctx must be an AVClass context, storing is done using + * AVOptions. + * + * @param opts options string to parse, may be NULL + * @param key_val_sep a 0-terminated list of characters used to + * separate key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @return the number of successfully set key/value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_opt_set() if a key/value pair + * cannot be set + */ +int av_set_options_string(void *ctx, const char *opts, + const char *key_val_sep, const char *pairs_sep); + +/** + * Parse the key-value pairs list in opts. For each key=value pair found, + * set the value of the corresponding option in ctx. + * + * @param ctx the AVClass object to set options on + * @param opts the options string, key-value pairs separated by a + * delimiter + * @param shorthand a NULL-terminated array of options names for shorthand + * notation: if the first field in opts has no key part, + * the key is taken from the first element of shorthand; + * then again for the second, etc., until either opts is + * finished, shorthand is finished or a named option is + * found; after that, all options must be named + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @return the number of successfully set key=value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_set_string3() if a key/value pair + * cannot be set + * + * Options names must use only the following characters: a-z A-Z 0-9 - . / _ + * Separators must use characters distinct from option names and from each + * other. + */ +int av_opt_set_from_string(void *ctx, const char *opts, + const char *const *shorthand, + const char *key_val_sep, const char *pairs_sep); + +/** + * Check whether a particular flag is set in a flags field. + * + * @param field_name the name of the flag field option + * @param flag_name the name of the flag to check + * @return non-zero if the flag is set, zero if the flag isn't set, + * isn't of the right type, or the flags field doesn't exist. + */ +int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); + +/** + * Set all the options from a given dictionary on an object. + * + * @param obj a struct whose first element is a pointer to AVClass + * @param options options to process. This dictionary will be freed and replaced + * by a new one containing all options not found in obj. + * Of course this new dictionary needs to be freed by caller + * with av_dict_free(). + * + * @return 0 on success, a negative AVERROR if some option was found in obj, + * but could not be set. + * + * @see av_dict_copy() + */ +int av_opt_set_dict(void *obj, struct AVDictionary **options); + + +/** + * Set all the options from a given dictionary on an object. + * + * @param obj a struct whose first element is a pointer to AVClass + * @param options options to process. This dictionary will be freed and replaced + * by a new one containing all options not found in obj. + * Of course this new dictionary needs to be freed by caller + * with av_dict_free(). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * + * @return 0 on success, a negative AVERROR if some option was found in obj, + * but could not be set. + * + * @see av_dict_copy() + */ +int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); + +/** + * @defgroup opt_eval_funcs Evaluating option strings + * @{ + * This group of functions can be used to evaluate option strings + * and get numbers out of them. They do the same thing as av_opt_set(), + * except the result is written into the caller-supplied pointer. + * + * @param obj a struct whose first element is a pointer to AVClass. + * @param o an option for which the string is to be evaluated. + * @param val string to be evaluated. + * @param *_out value of the string will be written here. + * + * @return 0 on success, a negative number on failure. + */ +int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); +int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); +int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); +int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); +int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); +int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); +/** + * @} */ -const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); /** * @defgroup opt_set_funcs Option setting functions From patchwork Fri Feb 23 13:58:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46463 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992491pze; Fri, 23 Feb 2024 06:32:21 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXr+lhyzvEtH1i9i1PsvhchrPXwSaGm4yhDquQjZ2oacbctEZyXd5nnB/SO4zFkt/fJz/Tcdrh3B7F1oB59Z1Jnl1Twyoqz4NiTIw== X-Google-Smtp-Source: AGHT+IGdgTfeu7a9cTBbGLE78EqVs1ARPquM/AeQaoHWWX+cXcCMIITk2UHAkztGrKylqGCvgYjh X-Received: by 2002:a50:c35e:0:b0:565:8287:d69d with SMTP id q30-20020a50c35e000000b005658287d69dmr7458edb.1.1708698741340; Fri, 23 Feb 2024 06:32:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698741; cv=none; d=google.com; s=arc-20160816; b=bEyZncsaG9M7MpG28mDWmMGf9wG9ozR9slsG5gIypRv5fFQ3jz3ganI5j/Ur27kQTO UxOJGgdn31VPGI6S5SHYj3fRppUn7n9JZTvmkHRV9cUpoJUKGi2EwfH35/eC8wFvB/2L ynMGtdvPd9u6//UPYlSisI+mI32cV17bFsN00MFQoFdyTMQaTpORNugWyAeNGKRwQbGw XVyaU+AiDBQ3Kmb1WTgbX5DLLdPJd5V3+Yvc4gvwMS7UKESx5MJ75cYYXxlVkiCAhk2U xcOR5xhuh/E6aZax6RcIxcGumsT80V0vxqMFA77rnD/Qc5XZG+B4BUFW8cxA1538zEpt g6xQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=mY54sn3Q64wW/u+AxUOECHlRxDwUKlE03mY0ShlWqCk=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=eh3MAJr/iM60ZAdrldt2ALaAu5ojtNMrZj+/rM92RiAPu2X0WExJKKYlH1dD8yqOFh 5fDwqO10AKNwVJL16OSPyGqCzjeo8VdCAb6Pgh0eiCLFsBeasGUME5Fbpg6scSo63+qa hvHFX439cwyrAXrEcJ5zhBxbo6gczNPNwUNxK7qxBEGY42SwdBZp1QIWf1FYIFUWIav+ iXOUGVpNBGnvQiUcw8PJt+HV5TUwtZ3WmeqNcvFxmyYkSlxJpjsiiwSSZBO1qwGWIXV5 XQaOrZ89rhcbXy/iw6zqs592pLR9+vVMOTh93WZAAQSSXvTNNXuvOqv3rmnaO6/35M53 nxNA==; 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=brdrt079; 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 dh28-20020a0564021d3c00b0056400f8616csi6156428edb.566.2024.02.23.06.32.20; Fri, 23 Feb 2024 06:32:21 -0800 (PST) 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=brdrt079; 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 7A3BD68C8CA; Fri, 23 Feb 2024 16:31:42 +0200 (EET) 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 5B6BC68C5EF for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=brdrt079; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id D8FCE4D24 for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id gEbNWFEe6OFx for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=OPBlqjT+7oJtSFwZygGbnjMBLsBcdgDTCVaBDie+AUM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=brdrt079BR4xvVHVhflvzUQCCA+X5DEIxNw9T5p5QtBKH/5WgLA1qQLmJ6vRZpBXc 6ylQT9l7yP1AIzSCCH06J/4TPh7duF8HU2mZ5ywO/1+R/aDGea+R/lzURaQ6rRgHPM L2+IDeQGVfRoNbwA/hp/I4WyiXpevi6VP/vvrbhZWKKPI4r2/d38GbzZX3F6UGGaUQ ouQTJDOmirjYUABFTTXDrhEpMDLRyGQiE+y0V/PAQJH7DokNI/P5EfH6H+RZXZhZG8 30bE2PXIhbOTDUaqONAiMYccyBMy6/2Ait87lEb8+1VJ0Mtqnn6lkMUYtHUCrU19y7 ioCBfdRoQnXIA== 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 5813F4D03 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0C2343A0CB4 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:27 +0100 Message-ID: <20240223143115.16521-6-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/38] lavu/opt: cosmetics, group option setting function together 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: SK4nz9yZFjZy --- libavutil/opt.h | 102 +++++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/libavutil/opt.h b/libavutil/opt.h index e2b6ba1f35..6ed19888a5 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -576,6 +576,11 @@ enum { * @} */ +/** + * @defgroup opt_write Setting and modifying option values + * @{ + */ + /** * Parse the key/value pairs list in opts. For each key/value pair * found, stores the value in the field in ctx that is named like the @@ -627,16 +632,6 @@ int av_opt_set_from_string(void *ctx, const char *opts, const char *const *shorthand, const char *key_val_sep, const char *pairs_sep); -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - /** * Set all the options from a given dictionary on an object. * @@ -672,28 +667,23 @@ int av_opt_set_dict(void *obj, struct AVDictionary **options); int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); /** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. + * Copy options from src object into dest object. * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. + * The underlying AVClass of both src and dest must coincide. The guarantee + * below does not apply if this is not fulfilled. * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} + * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. + * Original memory allocated for such options is freed unless both src and dest options points to the same memory. + * + * Even on error it is guaranteed that allocated options from src and dest + * no longer alias each other afterwards; in particular calling av_opt_free() + * on both src and dest is safe afterwards if dest has been memdup'ed from src. + * + * @param dest Object to copy from + * @param src Object to copy into + * @return 0 on success, negative on error */ +int av_opt_copy(void *dest, const void *src); /** * @defgroup opt_set_funcs Option setting functions @@ -761,6 +751,7 @@ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, in av_int_list_length(val, term) * sizeof(*(val)), flags)) /** + * @} * @} */ @@ -805,6 +796,31 @@ int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDiction /** * @} */ + +/** + * @defgroup opt_eval_funcs Evaluating option strings + * @{ + * This group of functions can be used to evaluate option strings + * and get numbers out of them. They do the same thing as av_opt_set(), + * except the result is written into the caller-supplied pointer. + * + * @param obj a struct whose first element is a pointer to AVClass. + * @param o an option for which the string is to be evaluated. + * @param val string to be evaluated. + * @param *_out value of the string will be written here. + * + * @return 0 on success, a negative number on failure. + */ +int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); +int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); +int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); +int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); +int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); +int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); +/** + * @} + */ + /** * Gets a pointer to the requested field in a struct. * This function allows accessing a struct even when its fields are moved or @@ -835,25 +851,6 @@ void av_opt_freep_ranges(AVOptionRanges **ranges); */ int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); -/** - * Copy options from src object into dest object. - * - * The underlying AVClass of both src and dest must coincide. The guarantee - * below does not apply if this is not fulfilled. - * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * - * Even on error it is guaranteed that allocated options from src and dest - * no longer alias each other afterwards; in particular calling av_opt_free() - * on both src and dest is safe afterwards if dest has been memdup'ed from src. - * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error - */ -int av_opt_copy(void *dest, const void *src); - /** * Get a default list of allowed ranges for the given option. * @@ -896,6 +893,15 @@ int av_opt_is_set_to_default(void *obj, const AVOption *o); */ int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); +/** + * Check whether a particular flag is set in a flags field. + * + * @param field_name the name of the flag field option + * @param flag_name the name of the flag to check + * @return non-zero if the flag is set, zero if the flag isn't set, + * isn't of the right type, or the flags field doesn't exist. + */ +int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); #define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. #define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. From patchwork Fri Feb 23 13:58:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46466 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992869pze; Fri, 23 Feb 2024 06:32:58 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWuhdxr9ia0IpqvOkQH6qsO4w+tewJGQhujP9Tju8XekHD8tAclmq5EDV8j5TO8K20yge7fzFM3wu8xD16tQTbQeG0KHmyL9IFJvg== X-Google-Smtp-Source: AGHT+IHlHdkLD99vr8C+VnU5rM5gB1sdIudSspS4hJa2kTgd+i3SuvQs5rF9XMU20zX8ENDDECiC X-Received: by 2002:a17:906:2b19:b0:a40:75e8:3891 with SMTP id a25-20020a1709062b1900b00a4075e83891mr743454ejg.7.1708698778567; Fri, 23 Feb 2024 06:32:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698778; cv=none; d=google.com; s=arc-20160816; b=Cvpesm31TeR475vP2VQ+Va/yC1jl1ESewGppNdsy1KtOteXyLL0OHMLaCVwGi5q619 BetRA9QyqXIVbTV2Sg6MoEcwDegvBWtFe9GtpKLgWe2gcs4SrioNStQm2oP6GVNR3iPl ncyfzt71i3mQTy1sXCfyQKO8umU2vRS7rnv3yetw1IDljHF0AKBhWkESGg06+uBmCIaf mVLmpFrxkByOMHEieTkkU0o9bLhm2ISyKmYUQWbNCu0h9JE3tCW3o953U0/O6KbRkhlq ciLn6eXTqg6kSLwL/7O3snHCr07XC4Hswmuetr6U7STvGtY887/rR9bR3j/zxDoy/qCY k+CQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=FyoFQLTu0Dfc3s32DRR8wLkwOa1ognTimoOgEocrSGc=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=d9rWTclbryWwXKB1/Ow3Vdqdv9UWBOElSidO5B+Q4WVZglKxAoyXqeZ9YEFDlef1l2 lxCyBgeMu/BrQGaa55j3czxVsCB0vFkdMeWixrI+8pcLeaNkcg7gYAZsd/YpvXTquE8M gLHkbx4lWi+mBioZITfdyDxd/0wgOfNjvXWGlvz6XY/5L6nYWQnGKG81+RB37ef8GCaT SVF6SWhoo9rb3MpuCtbo2iqlHLYFLqSrcAgscOJmgI9q5iiXyqNeo0sSR+tlACwQ6WsU YbSQCxI3KSkgckZriagQlCEq/fMXVTRss8jZSknK63cJFFifUZasm3a6/nTiexCRNKNE Vn+A==; 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=eMrY7ZUJ; 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 k2-20020a170906128200b00a3d62b89211si6254727ejb.293.2024.02.23.06.32.58; Fri, 23 Feb 2024 06:32:58 -0800 (PST) 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=eMrY7ZUJ; 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 D935F68C91A; Fri, 23 Feb 2024 16:31:46 +0200 (EET) 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 8BD3768C613 for ; Fri, 23 Feb 2024 16:31:30 +0200 (EET) 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=eMrY7ZUJ; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 3C5324CFF for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id ZUuXga63E6DA for ; Fri, 23 Feb 2024 15:31:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=oMnmgXC5iywLqq7So1meVWDElbej3yMWcvMPyE/LmLk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=eMrY7ZUJxdJbePbg7ALyi7E+tylZ8cxpCHTxASUoS6slYcx8YSou928G2E54/H9+R SpwChNglHC2FFPTlYlXzkTcHveSvlzR1yzGEAvvcd4y255qb1sidCYSjnG3Y3H0oEm 7Nc/sU986Ah/Pouyww/XtTGvNBougL1ZA1OHnqHJDQ0pEsnxANTLwKj4C/HOghhO74 KalxLEX9X3m3Z+Lqr92P5pkPE1aJatsVmirmKnguRsaSDpz5WXrNBwJXhV3xQleebQ d2KpqHiEa1jms33kK8yeXe82UNkIaTv/xfW3RqLFJ+LK/J75O3O+/zstnFg65mT/jr DBTCOI4pgLgzg== 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 5AC844D22 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 180183A0CB6 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:28 +0100 Message-ID: <20240223143115.16521-7-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/38] lavu/opt: cosmetics, group option reading function together 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: 3kFYB8FZhTNo --- libavutil/opt.h | 82 +++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 36 deletions(-) diff --git a/libavutil/opt.h b/libavutil/opt.h index 6ed19888a5..e34b8506f8 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -755,6 +755,11 @@ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, in * @} */ +/** + * @defgroup opt_read Reading option values + * @{ + */ + /** * @defgroup opt_get_funcs Option getting functions * @{ @@ -831,42 +836,6 @@ int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational */ void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_freep_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_free_ranges. - * - * @return number of compontents returned on success, a negative errro code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - /** * Check if given option is set to its default value. * @@ -926,6 +895,47 @@ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name) */ int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, const char key_val_sep, const char pairs_sep); + +/** + * @} + */ + +/** + * Free an AVOptionRanges struct and set it to NULL. + */ +void av_opt_freep_ranges(AVOptionRanges **ranges); + +/** + * Get a list of allowed ranges for the given option. + * + * The returned list may depend on other fields in obj like for example profile. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges + * + * The result must be freed with av_opt_freep_ranges. + * + * @return number of compontents returned on success, a negative errro code otherwise + */ +int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); + +/** + * Get a default list of allowed ranges for the given option. + * + * This list is constructed without using the AVClass.query_ranges() callback + * and can be used as fallback from within the callback. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges + * + * The result must be freed with av_opt_free_ranges. + * + * @return number of compontents returned on success, a negative errro code otherwise + */ +int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); + /** * @} */ From patchwork Fri Feb 23 13:58:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46491 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp995019pze; Fri, 23 Feb 2024 06:36:37 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXttOorp7KNitR6ehA/Bn5Vz/h6WEyhV+v5FdTtC2UVN3FCVNaV8ODj7XkBdFdORUG27An+DuX/dUZy5+CCXFeWEiwjZW57GakqTw== X-Google-Smtp-Source: AGHT+IH4sDyLH8yJ9lABAvbEW4fUBmZrcairUquTCepi6VWvcCQkSYmpx/HrrXq4lzkAMizID6Dp X-Received: by 2002:aa7:d7c4:0:b0:564:42e2:5b0 with SMTP id e4-20020aa7d7c4000000b0056442e205b0mr16944eds.13.1708698997126; Fri, 23 Feb 2024 06:36:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698997; cv=none; d=google.com; s=arc-20160816; b=BvgdiaGPFNK5q+RxMiUMOJ7I+9YNDJhj2gRunm8usw+CU1LJvRmRovkHdFR+sZNcRp pGIcYSN+OAG8JWa754qA85xs9wllJuqyKP3qzVU7Gu5vFDUV9til1mlUD8OTbsS9hilk KPt1fZGh3ZS8QHYXwCETh7LY+ZkdoPG6OnIz7UI/hSr3qG2o2Ke3CQEV4ajVQ7LYBD1s oQlvSw70ipa4l+JuF+T/WzNuQwX1HnBQltwv1q9OIteEOtT9SlnK7+0+CKDlrWrXz758 Bkljlox1PpuOl/xP3hHv5EYvy2cFUuNfS3YE8kS1yN3gV1bVnssBie7tVAGJVJGcK7m5 UJbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=x6eXVm3hVF71i/vTIzEVTc/6RhH9lO7p2t35AFZezBU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=hhPhUmhwRag0LaWBd+m3QuXMmcq7ZZ0CeKyWBa3TKh00luNl/vZfT4ykeVAjQXft01 BY2fP0lamr8qtGIClPbalvlJpLpXHOa317ef421wnYCMG23TsaxsySm2+CHkAqG3z+mP 6gMjNVL1B7g5lMn0jZfJoKr2skES20HD2vta4hHdoy5AfARPo4vtHU0XLb1InPYFdk0+ ctjGGyYf0cHxRxaqypHnOSONEyJKcBRdaTBQRTkIbTuZ/Lg9lA9pI/c2D+od5bF2KK0U GJzKAUpEuLrelvQeXpYPdlt4ZkZ3/WObMnj/zKhNb7LIZVs8BIFhjeY39B+aKhYQxYuc 7hiw==; 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=Ny3ml0iC; 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 j18-20020a05640211d200b005643fb48a5dsi5770512edw.3.2024.02.23.06.36.36; Fri, 23 Feb 2024 06:36:37 -0800 (PST) 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=Ny3ml0iC; 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 5DA0768CCBC; Fri, 23 Feb 2024 16:32:14 +0200 (EET) 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 156BB68C790 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=Ny3ml0iC; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 9B29E4D38 for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id beaIL6kHYlaE for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=yZFFzr8NevAy9vLagP02VUT7N72ndyTZxdfVGVi1qpw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Ny3ml0iC1npLIU4Rf7qlxwKMuDi2fz2hAx2eINvoCj2VhIWMbP3M+Lf1ygov8JuJZ P/mNOTLZheaMCxCqhhynpuZLylxO/8X0kl2wbSADm7c+HSIUW7hEf1fLtpEtkjGMSI I3CCHHt4sVETzP4yD19fzU16ydIztEPo43q5G3QDW0ITPE6HQ/BaCiOT5/03eVjFb/ Ki2BWnhU2RbLjLQyD/rmEAq/+Pc3rNuk/CnMtkZTA0h+2LizFjWLv4VMjvAGc14qNo ICw+aing+znkYC3+fUx1K/2oM5YM9Ggn9KfKFgNEK5HbeFrk/cqAqaJ1qhjagy5y32 L9OVWxLKugr6g== 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 5BC184D26 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 23D183A0F82 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:29 +0100 Message-ID: <20240223143115.16521-8-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/38] lavu/opt: simplify printing option type in opt_list() 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: D3qhH9wx8TJK --- libavutil/opt.c | 107 +++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 70 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index d13b1ab504..554916fbaf 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -1231,6 +1231,41 @@ static char *get_opt_flags_string(void *obj, const char *unit, int64_t value) return NULL; } +static void log_type(void *av_log_obj, const AVOption *o, + enum AVOptionType parent_type) +{ + const char *desc[] = { + [AV_OPT_TYPE_FLAGS] = "", + [AV_OPT_TYPE_INT] = "", + [AV_OPT_TYPE_INT64] = "", + [AV_OPT_TYPE_UINT64] = "", + [AV_OPT_TYPE_DOUBLE] = "", + [AV_OPT_TYPE_FLOAT] = "", + [AV_OPT_TYPE_STRING] = "", + [AV_OPT_TYPE_RATIONAL] = "", + [AV_OPT_TYPE_BINARY] = "", + [AV_OPT_TYPE_DICT] = "", + [AV_OPT_TYPE_IMAGE_SIZE] = "", + [AV_OPT_TYPE_VIDEO_RATE] = "", + [AV_OPT_TYPE_PIXEL_FMT] = "", + [AV_OPT_TYPE_SAMPLE_FMT] = "", + [AV_OPT_TYPE_DURATION] = "", + [AV_OPT_TYPE_COLOR] = "", +#if FF_API_OLD_CHANNEL_LAYOUT + [AV_OPT_TYPE_CHANNEL_LAYOUT]= "", +#endif + [AV_OPT_TYPE_CHLAYOUT] = "", + [AV_OPT_TYPE_BOOL] = "", + }; + + if (o->type == AV_OPT_TYPE_CONST && parent_type == AV_OPT_TYPE_INT) + av_log(av_log_obj, AV_LOG_INFO, "%-12"PRId64" ", o->default_val.i64); + else if (o->type < FF_ARRAY_ELEMS(desc) && desc[o->type]) + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", desc[o->type]); + else + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); +} + static void opt_list(void *obj, void *av_log_obj, const char *unit, int req_flags, int rej_flags, enum AVOptionType parent_type) { @@ -1259,76 +1294,8 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? " " : "-", opt->name); - switch (opt->type) { - case AV_OPT_TYPE_FLAGS: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_INT: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_INT64: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_UINT64: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_DOUBLE: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_FLOAT: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_STRING: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_RATIONAL: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_BINARY: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_DICT: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_IMAGE_SIZE: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_VIDEO_RATE: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_PIXEL_FMT: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_SAMPLE_FMT: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_DURATION: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_COLOR: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_CHLAYOUT: -#if FF_API_OLD_CHANNEL_LAYOUT -FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -FF_ENABLE_DEPRECATION_WARNINGS -#endif - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_BOOL: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_CONST: - if (parent_type == AV_OPT_TYPE_INT) - av_log(av_log_obj, AV_LOG_INFO, "%-12"PRId64" ", opt->default_val.i64); - else - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - default: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - } + log_type(av_log_obj, opt, parent_type); + av_log(av_log_obj, AV_LOG_INFO, "%c%c%c%c%c%c%c%c%c%c%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.', (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.', From patchwork Fri Feb 23 13:58:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46490 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994956pze; Fri, 23 Feb 2024 06:36:29 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUTpTWD8czHz21ge0Z9KXY0gSdSF41Y50CBy1f3N2tonut82CaDQgI4H+inWBnimM2uAkiGygi1MdXo2gxEdl5fNRa8jyZ3GNMCHQ== X-Google-Smtp-Source: AGHT+IEokFIx/lJbBcNo80+61AVENzCTFkKlbzfhzsBMCQpchNfQq6uJCiepdeB7IjWoWJ7tQoKs X-Received: by 2002:a17:906:81c2:b0:a3f:adcf:7f58 with SMTP id e2-20020a17090681c200b00a3fadcf7f58mr1287775ejx.21.1708698989424; Fri, 23 Feb 2024 06:36:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698989; cv=none; d=google.com; s=arc-20160816; b=wEA5g5wkA6idiR8/sDr0dfViUOHwmrhOwSwFCpV9nJf0DrmOfoYiEMlLjM1vt/AUEo WBombucDScqhAxi6fNAHV7aHldjk1kN8mU0igFZChV+InXbkdHy20EUv5x31pDx+BuYh Ch6XNoq1uz1x1cni0Tln/sRqC9dQRirkjTiW3EGknEjFpjoke86RCTM52WK9lsc61t7i LfjGP/vcRbHyEI6QJ1PAsUveQ2L2zSBRIFEc5I7z5i39fguaIurDNJ6gceUlckl68yx2 SQlJ3HkkL5unFQbbSalC9NKCCqtculNC8ltY9bdw5iMchJxk1mC6iMAoRsxjSW7Eq5BQ J2RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=76ml4YvdINHbWLfaAboGuVs0G5QAJQ8XHYf5q/6FpGU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=zP2T+/0ymOVKdCCeJKmggQw+E378R2plwCxOEzfMCdhnmxgw7ZilZM+MS3k35FHbgP dHhxdf1jn7LuYEH75xQEwNiixdqUQo5cbFJfaynKzWXDaPKok6PbsmnYyoEQxxzTsP6+ ssf8u+28eSdpi0u1y9kGd467hyGgNuwSeiFk2/Th9HcRba7TmjvunJdKZR1OqSY0pDY3 WmmAV3lfvyGbRLv32RFxi1oCz8UdhDjhnTAUOz7lVbrcVDxXsf/R+MoAwHlz5L2Ev0x2 ZX2BccJqz4E/2P6UbJrraf+8Y/Gv/W5Pyp70VXcw9Vdfn2eT7rbz9ffiSI+zWQp+17Dk c5ug==; 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=IT3aQB22; 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 r8-20020a170906548800b00a3ee04c0addsi3729593ejo.945.2024.02.23.06.36.28; Fri, 23 Feb 2024 06:36:29 -0800 (PST) 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=IT3aQB22; 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 4C12C68CC9F; Fri, 23 Feb 2024 16:32:13 +0200 (EET) 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 0E08868C5EC for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=IT3aQB22; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 621104D22 for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id r5qCJGFYwGln for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=uaL9LYbhPXE8zJo4slWsGAVVX/yPL5gwgB/mKcAUSTY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=IT3aQB220TwyPLhCqun47xaVLAg3nCub3yG6uDjxClZitXjeBydGUgsm92hyS8pKf 7AHSTHYH2KwuX4V4a7RGgfqJDK2GwjtWMow7WjAt4Rb7JC2E/QFMdjMSdB0Src7wzc STqWjXQ/RRZreeGlVF2ROYSmU3GSKm3Spz4nkz3KIC14IWfbqejThJXDQzLC5zsXlD IhjTGZlusiIzVzfSwn+PrGF6pKOtFpKtNTrDzdrhRLCazsOGBGrjGOwaVRkKN5qgKf FBLZDOkdqJEv7aR3HPw0MzjbvH2AC5xWpeIb3HnYA7j3sLGkTlIbkRUHxxX4G4N2dl KZLbgOHMmmI9w== 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 5BBF74D24 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 2F4F43A160F for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:30 +0100 Message-ID: <20240223143115.16521-9-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/38] lavu/opt: factor out printing option default from opt_list() 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: eO9gofyviuek --- libavutil/opt.c | 150 +++++++++++++++++++++++++----------------------- 1 file changed, 78 insertions(+), 72 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 554916fbaf..49b7da7742 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -1266,6 +1266,83 @@ static void log_type(void *av_log_obj, const AVOption *o, av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); } +static void log_default(void *obj, void *av_log_obj, const AVOption *opt) +{ + if (opt->type == AV_OPT_TYPE_CONST || opt->type == AV_OPT_TYPE_BINARY) + return; + if ((opt->type == AV_OPT_TYPE_COLOR || + opt->type == AV_OPT_TYPE_IMAGE_SIZE || + opt->type == AV_OPT_TYPE_STRING || + opt->type == AV_OPT_TYPE_DICT || + opt->type == AV_OPT_TYPE_CHLAYOUT || + opt->type == AV_OPT_TYPE_VIDEO_RATE) && + !opt->default_val.str) + return; + + av_log(av_log_obj, AV_LOG_INFO, " (default "); + switch (opt->type) { + case AV_OPT_TYPE_BOOL: + av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(get_bool_name(opt->default_val.i64), "invalid")); + break; + case AV_OPT_TYPE_FLAGS: { + char *def_flags = get_opt_flags_string(obj, opt->unit, opt->default_val.i64); + if (def_flags) { + av_log(av_log_obj, AV_LOG_INFO, "%s", def_flags); + av_freep(&def_flags); + } else { + av_log(av_log_obj, AV_LOG_INFO, "%"PRIX64, opt->default_val.i64); + } + break; + } + case AV_OPT_TYPE_DURATION: { + char buf[25]; + format_duration(buf, sizeof(buf), opt->default_val.i64); + av_log(av_log_obj, AV_LOG_INFO, "%s", buf); + break; + } + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT64: + case AV_OPT_TYPE_INT64: { + const char *def_const = get_opt_const_name(obj, opt->unit, opt->default_val.i64); + if (def_const) + av_log(av_log_obj, AV_LOG_INFO, "%s", def_const); + else + log_int_value(av_log_obj, AV_LOG_INFO, opt->default_val.i64); + break; + } + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_FLOAT: + log_value(av_log_obj, AV_LOG_INFO, opt->default_val.dbl); + break; + case AV_OPT_TYPE_RATIONAL: { + AVRational q = av_d2q(opt->default_val.dbl, INT_MAX); + av_log(av_log_obj, AV_LOG_INFO, "%d/%d", q.num, q.den); } + break; + case AV_OPT_TYPE_PIXEL_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(av_get_pix_fmt_name(opt->default_val.i64), "none")); + break; + case AV_OPT_TYPE_SAMPLE_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(av_get_sample_fmt_name(opt->default_val.i64), "none")); + break; + case AV_OPT_TYPE_COLOR: + case AV_OPT_TYPE_IMAGE_SIZE: + case AV_OPT_TYPE_STRING: + case AV_OPT_TYPE_DICT: + case AV_OPT_TYPE_VIDEO_RATE: + case AV_OPT_TYPE_CHLAYOUT: + av_log(av_log_obj, AV_LOG_INFO, "\"%s\"", opt->default_val.str); + break; +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: + av_log(av_log_obj, AV_LOG_INFO, "0x%"PRIx64, opt->default_val.i64); + break; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + } + av_log(av_log_obj, AV_LOG_INFO, ")"); +} + static void opt_list(void *obj, void *av_log_obj, const char *unit, int req_flags, int rej_flags, enum AVOptionType parent_type) { @@ -1332,78 +1409,7 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, av_opt_freep_ranges(&r); } - if (opt->type != AV_OPT_TYPE_CONST && - opt->type != AV_OPT_TYPE_BINARY && - !((opt->type == AV_OPT_TYPE_COLOR || - opt->type == AV_OPT_TYPE_IMAGE_SIZE || - opt->type == AV_OPT_TYPE_STRING || - opt->type == AV_OPT_TYPE_DICT || - opt->type == AV_OPT_TYPE_CHLAYOUT || - opt->type == AV_OPT_TYPE_VIDEO_RATE) && - !opt->default_val.str)) { - av_log(av_log_obj, AV_LOG_INFO, " (default "); - switch (opt->type) { - case AV_OPT_TYPE_BOOL: - av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(get_bool_name(opt->default_val.i64), "invalid")); - break; - case AV_OPT_TYPE_FLAGS: { - char *def_flags = get_opt_flags_string(obj, opt->unit, opt->default_val.i64); - if (def_flags) { - av_log(av_log_obj, AV_LOG_INFO, "%s", def_flags); - av_freep(&def_flags); - } else { - av_log(av_log_obj, AV_LOG_INFO, "%"PRIX64, opt->default_val.i64); - } - break; - } - case AV_OPT_TYPE_DURATION: { - char buf[25]; - format_duration(buf, sizeof(buf), opt->default_val.i64); - av_log(av_log_obj, AV_LOG_INFO, "%s", buf); - break; - } - case AV_OPT_TYPE_INT: - case AV_OPT_TYPE_UINT64: - case AV_OPT_TYPE_INT64: { - const char *def_const = get_opt_const_name(obj, opt->unit, opt->default_val.i64); - if (def_const) - av_log(av_log_obj, AV_LOG_INFO, "%s", def_const); - else - log_int_value(av_log_obj, AV_LOG_INFO, opt->default_val.i64); - break; - } - case AV_OPT_TYPE_DOUBLE: - case AV_OPT_TYPE_FLOAT: - log_value(av_log_obj, AV_LOG_INFO, opt->default_val.dbl); - break; - case AV_OPT_TYPE_RATIONAL: { - AVRational q = av_d2q(opt->default_val.dbl, INT_MAX); - av_log(av_log_obj, AV_LOG_INFO, "%d/%d", q.num, q.den); } - break; - case AV_OPT_TYPE_PIXEL_FMT: - av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(av_get_pix_fmt_name(opt->default_val.i64), "none")); - break; - case AV_OPT_TYPE_SAMPLE_FMT: - av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(av_get_sample_fmt_name(opt->default_val.i64), "none")); - break; - case AV_OPT_TYPE_COLOR: - case AV_OPT_TYPE_IMAGE_SIZE: - case AV_OPT_TYPE_STRING: - case AV_OPT_TYPE_DICT: - case AV_OPT_TYPE_VIDEO_RATE: - case AV_OPT_TYPE_CHLAYOUT: - av_log(av_log_obj, AV_LOG_INFO, "\"%s\"", opt->default_val.str); - break; -#if FF_API_OLD_CHANNEL_LAYOUT -FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: - av_log(av_log_obj, AV_LOG_INFO, "0x%"PRIx64, opt->default_val.i64); - break; -FF_ENABLE_DEPRECATION_WARNINGS -#endif - } - av_log(av_log_obj, AV_LOG_INFO, ")"); - } + log_default(obj, av_log_obj, opt); av_log(av_log_obj, AV_LOG_INFO, "\n"); if (opt->unit && opt->type != AV_OPT_TYPE_CONST) From patchwork Fri Feb 23 13:58:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46458 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992770pze; Fri, 23 Feb 2024 06:32:49 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWJIPgw37K6VHP1Vsr4bW1gYT1GKO07PZZ/nvS0O3sDNQCp1agH5tsyeK0LA8F9FBeNhwfYgF+yKEooUWRwC4jQs2d9Zuwh4tCcyQ== X-Google-Smtp-Source: AGHT+IGlqCvSevNf8oMX1MSfEaX7jpj+96VPKbJLPD6PgiR0pIuPpm4FQg4nBYtymr0lu0qmZ/Nq X-Received: by 2002:a17:906:f150:b0:a3e:b263:d769 with SMTP id gw16-20020a170906f15000b00a3eb263d769mr1372194ejb.4.1708698769625; Fri, 23 Feb 2024 06:32:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698769; cv=none; d=google.com; s=arc-20160816; b=i+M5sHCnBLZeAZSghxYHD4b1RwAAEI14t1pYZtaVYJiDYFMDvG5O33xbNens0zfgkZ FQ0qWG9G6PPqDgfR2fwevNh0lQ23FkGNZiim7WnHz0iy7OJ/ts4JCBlK0w13Iihmq6W0 I6EkGmzSvU2+jWbxIqQYo1m1C8NoawdFk1L0ag6HW768rvipdxGLqoNb8tqjQLRgE6lW w8pOuppK3fqk60u7kRwFtnB216vhJQJ8e17fH/ppH/Es8HFq7a9x2DPovWO7sEssF6YU XsGazpvAjPN9+xWI8kSRf3yr51W3vyxW8ioF9kj6C8oTBJUwXENBDvHzti/tUiQLlpVm 4X2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=sc5Zdt6DB490fpQy5lBWrTQjTflPggsLokKFM8ybkO8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=LnZh7XyPRDSBs3F/eOccGhD7KNKLwISspo7jrrfOvKLp9/mJbR4US6NABNIhJB1Yzi PR6lzb8EMNGbWXK0I3jfSgGGievgO5GWzUr8hpRD0sXikopgrk+ydGM7mRJwBH7M5sBt dV0ldwVUB+hMYipTpZh7Ow+yZSqtZWg03+ufPc7kPtvj1VrP965JyVFRdJqiP0SBH9vd dKUlKUC3R0tdiaQuOuREeER6r5MaJyfznVeBjPIXomATF3OKMWu2n7Amyd9sVpZ2LP7Y LoXkX0AvNgSo1TphMq0zEHFz1UG4xlunvsKFNuHIl+DDIayF6nDeTCfrdrHh9Ae8X/1C 3K3Q==; 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=XV9eevBq; 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 q26-20020a50aa9a000000b005643c129c0asi5337831edc.416.2024.02.23.06.32.49; Fri, 23 Feb 2024 06:32:49 -0800 (PST) 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=XV9eevBq; 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 BDBAE68C7A2; Fri, 23 Feb 2024 16:31:45 +0200 (EET) 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 4FDAF68C5EE for ; Fri, 23 Feb 2024 16:31:30 +0200 (EET) 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=XV9eevBq; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id EAE1E448A for ; Fri, 23 Feb 2024 15:31:29 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 6TCm5iyL_Htv for ; Fri, 23 Feb 2024 15:31:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=7I/48SG3QLh9XFIFUPZcp02lpxBAML9ic2aa5eC1BfU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=XV9eevBqD8zo+y0U1rHh8vUdbMw4ssHGk6Gby/pYeriHhBryqKs3wtsuECfdzStYI 6NjArW67f5Q8YzO+d/0XnSnKrUUdkk+10PNdAdZFuwwnNuxv6bbzlRFtKTZxsY1e4E 0H9+MKZPnGc877gKr3r2sWwFp+wnYePjlFwEk1CmEqduPk0/5W1Yg1SFXk9hhSLXkb 0L/cJGgeQTQJmTxRh3ytX2FGVZHe3otQsPgFOlvf6TzV+XjZX6zqyj8SWu99/uBJJ4 Ak0V/VSlXCmQVHWhZDqyfsYhEjg/1XS0ehKNNqIXC4BoFXoY4Ny+JkpCnPndy3LVoo d/IAEDJK0bHFg== 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 655254D38 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 3B6F83A1931 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:31 +0100 Message-ID: <20240223143115.16521-10-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/38] lavu/opt: drop useless handling of NULL return from get_bool_name() 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: PknSBhLWY6Vs That function always returns an actual string. --- libavutil/opt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 49b7da7742..0ffdfc9a1e 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -853,7 +853,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) buf[0] = 0; switch (o->type) { case AV_OPT_TYPE_BOOL: - ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(get_bool_name(*(int *)dst), "invalid")); + ret = snprintf(buf, sizeof(buf), "%s", get_bool_name(*(int *)dst)); break; case AV_OPT_TYPE_FLAGS: ret = snprintf(buf, sizeof(buf), "0x%08X", *(int *)dst); @@ -1282,7 +1282,7 @@ static void log_default(void *obj, void *av_log_obj, const AVOption *opt) av_log(av_log_obj, AV_LOG_INFO, " (default "); switch (opt->type) { case AV_OPT_TYPE_BOOL: - av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(get_bool_name(opt->default_val.i64), "invalid")); + av_log(av_log_obj, AV_LOG_INFO, "%s", get_bool_name(opt->default_val.i64)); break; case AV_OPT_TYPE_FLAGS: { char *def_flags = get_opt_flags_string(obj, opt->unit, opt->default_val.i64); From patchwork Fri Feb 23 13:58:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46462 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992411pze; Fri, 23 Feb 2024 06:32:12 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWH4hECJpbtrpRG5J4n+CWfvaq5leJRkbO80Kij/LvJV39AmJFp2BEf0fCT0uZOEQGjTkrBBJeqiewfTPOfbiy1UaPx7L5LMngW7g== X-Google-Smtp-Source: AGHT+IF5aQq3tMeOhzrHc1ak3RsWEBpXGruPbKM9WgyHdR5z7/Qgp/OIUhrQUQfHAjwyZQx6ODnh X-Received: by 2002:a17:906:2a8c:b0:a3e:5ae8:5777 with SMTP id l12-20020a1709062a8c00b00a3e5ae85777mr1324570eje.44.1708698732155; Fri, 23 Feb 2024 06:32:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698732; cv=none; d=google.com; s=arc-20160816; b=lu61Kz+lti/3hHbSrRMiuxk6s19QWTb5WRwwSYQPpRYTMexdSYCzS2f7kzVWChdysM M1wX6FNGM7KrrUMX/Ogc6ceEKpPAEfYQB4dGrA2oXdvbugJd+flW6iVgEmOegTbSny6p 9Uwz3+DYCwm7dD2rYB4EqHvaMeI79FDd6BSC39dYr0+psJg3PAaspQyKtjjifebRB3DA OQxiqzPmFOct7Mlu9PJLFzTAPqYm+Se8rbnVU0fX2R+gF3GUEBrON873N2evm0a/CE6A USY1kAbxw6Z6fiQG70bpAsxybZLa+mOwgrzq6ls7OXCL2YIo6dksXn5CA0fSG6LU2Ahi gSHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=c5uOlQIF2IVWEGFB6aCpik7JQ5DZU3gJh8ecBeDrO3c=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=bhtJWa1Yf5QBQnMVWLQtj6jzUj7w7BXdT76x9Q3biPE4EBC5rACafvAahpvRa25vQe cSBcvCGGpBMEoulkQS0Frv1Uv3l1UiHogUrOG0/NyNXTZwB+T7I4f24WZ4kV8UVcsN0j bcexB8kuBoIgUGY9Gdf2zvU9nc/kGQsS5jJhzIAYEplXH//Ev8ARcFV1hx/cgXWl1CKB I8ol4k9EiPNjW49F2LcNYokVsUZ53RIEolBuqjDBKDTn1j7PIFRciWhKKuj2Ak8ph+cy l/m7/TEdPzoOC7qhugTE1nC35xAh2JhUCHztHSc0z4zd031wBib7sUmFcoPZ6Mw8s+i/ ysGw==; 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=hLBGX91U; 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 qw39-20020a1709066a2700b00a3e9a48cd38si4888276ejc.0.2024.02.23.06.32.11; Fri, 23 Feb 2024 06:32:12 -0800 (PST) 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=hLBGX91U; 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 57A9E68C865; Fri, 23 Feb 2024 16:31:41 +0200 (EET) 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 60FE468C613 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=hLBGX91U; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id E86DE4D03 for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id IJ0Y7E1q2hiZ for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=7vc6Mo5RrHBKqnuFQQ1dcnbyRwGKpdoseaKpXq8y8dU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=hLBGX91Ui9xX4A1lcDCaqhOARuaBSbzE3bvPMzr/pcdcOrYFeeM2+/9sY/1EuW2ku DyvW9uqZyO3ouKIsJeorkPZFiRbc4PHSAG1BzJowxRfdkYdE1QvR/1GwgUM4fwpN8I zAneDWGyyKl8BYtgivxQvdxziygZZ98SRFPcREANJw0Z+TU+O2/y8PMII0NvNxnD6x X9yrZ9fkzanW5kuKb7OpiwwZPM0gFJfWEx4Sh6BKnxLYP3I7eBr5EK18++0eIcUO3R NisqRkpj6sy6Dz0KxW8PMbPq1Ic9VpAaW1jccmFLY2yyDN8CxcBqvE68dOUBAuFs1V DzmhK9X82ot1g== 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 7BCEF4D3E for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 46E2A3A197B for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:32 +0100 Message-ID: <20240223143115.16521-11-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/38] lavu/opt: drop an always-NULL argument to get_number() 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: e1/Q0Dp0uB/u --- libavutil/opt.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 0ffdfc9a1e..54a99c689c 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -955,7 +955,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return *out_val ? 0 : AVERROR(ENOMEM); } -static int get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum, +static int get_number(void *obj, const char *name, double *num, int *den, int64_t *intnum, int search_flags) { void *dst, *target_obj; @@ -965,8 +965,6 @@ static int get_number(void *obj, const char *name, const AVOption **o_out, doubl dst = ((uint8_t *)target_obj) + o->offset; - if (o_out) *o_out= o; - return read_number(o, dst, num, den, intnum); error: @@ -981,7 +979,7 @@ int av_opt_get_int(void *obj, const char *name, int search_flags, int64_t *out_v double num = 1; int ret, den = 1; - if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + if ((ret = get_number(obj, name, &num, &den, &intnum, search_flags)) < 0) return ret; if (num == den) *out_val = intnum; @@ -996,7 +994,7 @@ int av_opt_get_double(void *obj, const char *name, int search_flags, double *out double num = 1; int ret, den = 1; - if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + if ((ret = get_number(obj, name, &num, &den, &intnum, search_flags)) < 0) return ret; *out_val = num * intnum / den; return 0; @@ -1008,7 +1006,7 @@ int av_opt_get_q(void *obj, const char *name, int search_flags, AVRational *out_ double num = 1; int ret, den = 1; - if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + if ((ret = get_number(obj, name, &num, &den, &intnum, search_flags)) < 0) return ret; if (num == 1.0 && (int)intnum == intnum) @@ -1042,7 +1040,7 @@ int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRatio double num = 1; int ret, den = 1; - if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + if ((ret = get_number(obj, name, &num, &den, &intnum, search_flags)) < 0) return ret; if (num == 1.0 && (int)intnum == intnum) From patchwork Fri Feb 23 13:58:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46464 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992589pze; Fri, 23 Feb 2024 06:32:30 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCW7biqH54+RtH5kXsKF6LQ58zNA3//JsFy0LFYdNV2dz3j+M3nnl0OEkKy79dD3HwKsqPDIbI2gjOVGWYpI4kowPpF3/AhVTwqciA== X-Google-Smtp-Source: AGHT+IFAHzyIjCtD60inTvqmJC/KE7IL9VYeqtReKgAvoWQl2MO/xXt1PnuqPibCbtHF5YcQQ5O6 X-Received: by 2002:aa7:ccd8:0:b0:565:1ee9:4f11 with SMTP id y24-20020aa7ccd8000000b005651ee94f11mr2371edt.15.1708698750269; Fri, 23 Feb 2024 06:32:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698750; cv=none; d=google.com; s=arc-20160816; b=DsDengVDb7PNLpsi0dkpybG86nV+Vkc8WbT2uRW39w7M+oVXhKq2KeXHrznmo8PPcH zTAuSBOuAy6xkC4df4Df4StQkcP/AC8cypd17b94ExUKQlNMH1oc3VkVNNYUragLPrj2 yEx2d9duZdsmCndX39fHRIq1ttag7u5SzxaKk5lBwd++Q7VbG+5NY3Dln4HDS6XpytKV +lvfz+ATF9ujRocYfpFLaXlkCQJZ8EWEt1blWWHIJ1j+DVmfafxVtE0sGgGOLB3UaJL6 0ZiAX4/dDjIxmeFMX5pWcHyr9DYk6bKmU8nQDlEtdJH+WYB3Z4qawWuE8d7IMG1OsvDE 0yDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=SQb6Ji5+ryqqZuoN8ECQ3WJHaCLjnSmHb1jiXV+Ha00=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Lollf/K4Grx1nVV933t5GsVQahycmBtrH9rZymq4Cx5nwVvtzhti47np4+aPosKByK 86JlhIGyuzeIetGW5tUSEiH8IxmxB+4ymTd0rO9pu1xcYWgYlv3aoBe3F9+pMVB1ilZp pW2I0PUtTq69ttQ1Ey1MyeMMUxiLTDwc2c6KYcGe1h6dWUuCX3KlKa5L5q+eWZ7rAWP6 KLXi+O2+SYconi/YioG8HGlH6bbeQ4ZeZI6hDkIisBfclJpWZ8wNiraQ442TWKNXhbAp 6bwcDIM0of6Czcld5jNmtt77xhB9+rGjcPl9hPSIvVudzDFAuCvPP9iAbB3K2FbsPdGY duHQ==; 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=WtkRP9h4; 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 ba7-20020a0564021ac700b005633f37a2d1si6135290edb.365.2024.02.23.06.32.29; Fri, 23 Feb 2024 06:32:30 -0800 (PST) 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=WtkRP9h4; 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 A30DB68C8AE; Fri, 23 Feb 2024 16:31:43 +0200 (EET) 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 7F27C68C462 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=WtkRP9h4; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 85B5E4D41 for ; Fri, 23 Feb 2024 15:31:31 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id RevcTYfGMeer for ; Fri, 23 Feb 2024 15:31:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=R/LerEsMqvqJIj3p7go4Gg+JhHIm4bn7q6u/xO/wrfA=; h=From:To:Subject:Date:In-Reply-To:References:From; b=WtkRP9h43fFYldjQ2KP7zGCI6efIHzgK1IS3/pwF+1ru0vNSc9nVAEkNbvalkw/9k aPUyLUtIM0wOXgtF1AXrOFQreVWskvK5AJ4uEKfTmf1G16y5t7r9lsAGwo4IDyyq4a RUho+q9+RfkSp8t7oCdn520lqWsAyHpS63vm0LPEHP8QwzQiZyD4wUYMVWYA4apBOO BbkfJYbGfNjj/uYdf1uCC6eN+R76iaRs8XgHqdxg8FqXhXx5iNGawggAXsSqnzpYxM D/3WB0bZUj2T+QxM6QbntVq6mWI30JYdzOw9hGq2vOutAon450XaNNLo8/DvtIGI+A qZxvRuPu3yJNg== 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 784A44D3C for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 5285C3A1A74 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:33 +0100 Message-ID: <20240223143115.16521-12-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/38] lavu/opt: simplify error handling in get_number() 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: irG4vZREu7Yw --- libavutil/opt.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 54a99c689c..75a27c4d9b 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -961,16 +961,11 @@ static int get_number(void *obj, const char *name, double *num, int *den, int64_ void *dst, *target_obj; const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) - goto error; + return AVERROR_OPTION_NOT_FOUND; dst = ((uint8_t *)target_obj) + o->offset; return read_number(o, dst, num, den, intnum); - -error: - *den = - *intnum = 0; - return -1; } int av_opt_get_int(void *obj, const char *name, int search_flags, int64_t *out_val) From patchwork Fri Feb 23 13:58:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46467 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992939pze; Fri, 23 Feb 2024 06:33:07 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVySVDEBrM1D5LT9sn8tMgX/R1ib3xzA565CQ7qAuaNlfRbx8agw30sfjTdmzsfnhHaTlcU6ylgmL+wkFU+aHC+JiKmTua6PUbomQ== X-Google-Smtp-Source: AGHT+IGOM48IgWK/6sOJboqU8Lte74b6TzzG4eXPLgW3ZF0CFpeEO59DTkralzt3KpoG8ZvHqG9p X-Received: by 2002:a05:6402:b12:b0:565:4e5c:2815 with SMTP id bm18-20020a0564020b1200b005654e5c2815mr5277edb.24.1708698787209; Fri, 23 Feb 2024 06:33:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698787; cv=none; d=google.com; s=arc-20160816; b=jl/v248FunktMAXI2iq/YeYy9mWXJQpgIr7Sxn6JT0SBBB+370N49VYGsSmZHhFYpa yEB9qRGmnMoBcz3n9nKKEKyRqmozgwl9aTRjItcqKg1OnTZNp40LKppwJcbes7Q36wVk wj1WiNFNYSBbdmVEKJraaOTy+JU6DHvkZOuu6tqBZDqNmlexnpK+zeEZ6mBUh+PJown2 jJvhgyRXnFXAFp+Q76ju6OuX95p5vnJq+eqcFCSWDj01FBcKk8bKL3m2sZT77sIhXHql d+45EyOvdInKJBOlEvG0UsgM1Ji8AJdTapNjyS6yNd4qe6Oc5tk5nSODuGvA8AQy7KI8 KN6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Hz13cS1aMcE48U/8acO9VOQr+9f3Pqw9n5XCt6HhniY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=DvczkquQ0rDQK0TG0HIhM5JIa6C9IPnYXBak3J+jOs1NxKg+D1ddIkqZMf5P+CCUEo oCsNlpF4bfoy4Wzz5Ayx5WCm631n5Uc0olrUPLmRKHNarG/thK6G6v6R98/9c1zWmieR 7mfxRQFTwhTEuXb69AQPUcNeQkP8zWEPQnaf4QNP+G7Ez+jbFdx7vwDyR7QMfL8FKTrT i6zrJiBQ12o1ot9tkGiAjNhUQKUbUARm+i8qtTJa+EjrftiWrGVrCF0ThXTkbqsF2JV8 n61Cwx48RggwhBoh5/aLilM5Y8nIWc7uwvCgLeVPBuJJ+hgDukiYw5ZI5ITzNQuAh44C 2ivQ==; 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=AE5Q6chR; 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 dz20-20020a0564021d5400b0056575a72210si494343edb.74.2024.02.23.06.33.06; Fri, 23 Feb 2024 06:33:07 -0800 (PST) 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=AE5Q6chR; 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 E69C068C931; Fri, 23 Feb 2024 16:31:47 +0200 (EET) 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 9882368C5EF for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=AE5Q6chR; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 3AE574D3E for ; Fri, 23 Feb 2024 15:31:31 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id e_Y0h6cnAYYO for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=XJgClr5pnCWe6KThUk9tLHoXs9sbcLEShI+YKfszUYg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=AE5Q6chR4lmLpocKgfBp/e6OAkjL7+9t8keErCkyczpTW+M9x8wg41zYkX3RpLlyY osZ6t54nTRbPMhvPfaSUDFdhvyEEBtMZCaxrDKiCNpMq0tcDBaMUlvIIgrkYTc/I36 dUrzC5nNdLP9LWMyg92FkM+J1wfa+8pCOGi66CIQmYchIvk57ASN9mHCRbs2ncdy8k 9XDJx+M/JOsDDmpxfHtXhxg76CSVTtv9p5JVBf4VLs+4ihoVhdUAZgkOD9yTOQ5Sqp f9z9ypSBEKO+FlLh5GXb1nYKs4B1usPRYKhnJ5AEhZ3yEToGqXO07QrDfagtrOE8Ps f7pM0WsydNHdw== 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 87DF24D41 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 5E5093A1A81 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:34 +0100 Message-ID: <20240223143115.16521-13-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/38] lavu/opt: get rid of useless read_number() calls 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: JML8YoRX1fYv The option type is known and fixed for all these, so reading the value directly is simpler and more clear. --- libavutil/opt.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 75a27c4d9b..8ee89237c5 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -313,7 +313,7 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con } } if (o->type == AV_OPT_TYPE_FLAGS) { - read_number(o, dst, NULL, NULL, &intnum); + intnum = *(unsigned int*)dst; if (cmd == '+') d = intnum | (int64_t)d; else if (cmd == '-') @@ -2025,8 +2025,7 @@ void av_opt_freep_ranges(AVOptionRanges **rangesp) int av_opt_is_set_to_default(void *obj, const AVOption *o) { int64_t i64; - double d, d2; - float f; + double d; AVRational q; int ret, w, h; char *str; @@ -2071,13 +2070,11 @@ FF_ENABLE_DEPRECATION_WARNINGS return 0; return !strcmp(str, o->default_val.str); case AV_OPT_TYPE_DOUBLE: - read_number(o, dst, &d, NULL, NULL); + d = *(double *)dst; return o->default_val.dbl == d; case AV_OPT_TYPE_FLOAT: - read_number(o, dst, &d, NULL, NULL); - f = o->default_val.dbl; - d2 = f; - return d2 == d; + d = *(float *)dst; + return (float)o->default_val.dbl == d; case AV_OPT_TYPE_RATIONAL: q = av_d2q(o->default_val.dbl, INT_MAX); return !av_cmp_q(*(AVRational*)dst, q); From patchwork Fri Feb 23 13:58:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46469 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993137pze; Fri, 23 Feb 2024 06:33:25 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVk8I/vakSgEXJjV9YFgtIQVHfgdQQfWdvU4qWmpBLbjwCr1WJSkoBbmozLACqHUDv83Mf7guelvGMQkZymysxj2s5Q0GJr8vRebA== X-Google-Smtp-Source: AGHT+IGkltE5k0Xm+1bZwS4NzPjsM0Y8njdxVOq9Soag+dJcAk/GLaZRJSzGLUN7r+AoMN9XtFbY X-Received: by 2002:a05:6402:31fa:b0:565:78ff:a65b with SMTP id dy26-20020a05640231fa00b0056578ffa65bmr24115edb.24.1708698804720; Fri, 23 Feb 2024 06:33:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698804; cv=none; d=google.com; s=arc-20160816; b=0YCaaQWWmsPTImjomZ9ATGy+4d/4uhTGztGlGn1HV58P0q9wPctO4mB3nE5z6FwmDb vh58f02OsdQcXwHYcE6Dr1JwiFdJ4taEIZRb3sH26bdeU2lTKZJqSTk9uMVTQNRK+p+f QfNJH0ISjr3qR3eIU40Tz/qM3ZbGN9wl+YLvsMV0R5O3h9D/fRAbnfPX94Ek6MjLmu43 jvdVyvmbO23v7pwH5GK9T+N2PzIOrHUE7SO9RZSaqsbNtKVD98d+Iif4w75FJwtpW9wo +A85iPF7VvdniXOJDTNyC4fYU+aL6WVr1mX2S3T5B8I7h18tl206HkqKXuQKIWwpzK0C XwoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=EN5cPbcXxX+cKxAp1sZ02ek6mwBs5EW6+gxQGkLLgG8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=i1SMSZyusA3gU48bfqEMvkG9uFCn78ng/XKew5MpVpGH+3qTWEmsbJHGOhZLgjHFF1 GBnCTAK0XHiVw1xaLfwFSBNY4R/QOhoJXkhoSLMfUluQpPhsIJrwmr7bBj0aWRh5DdX0 /Oz+ya5yTocz5Q7sE2JN1dBZSfS44KbJjkjHQD80PawwKY7zNiLRR7iHprqmkxl4MWpO FCaFWOtgYFdCokhKnpFM/AbUeTD6/HvVrthSWLLJQpkONYwofRKSd/yw39w8zq0eW4NU Dgp8dGeg/23IvaPvoyZktHBlw3En1jPIc7RLT6LuRYH1WXwFmFcx12uE1fiD/5+OyiBM iNZg==; 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=NdIAbADM; 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 j22-20020a508a96000000b00564953c2af7si3995806edj.224.2024.02.23.06.33.24; Fri, 23 Feb 2024 06:33:24 -0800 (PST) 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=NdIAbADM; 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 0683668C95B; Fri, 23 Feb 2024 16:31:50 +0200 (EET) 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 A498F68C462 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=NdIAbADM; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 5EE334D26 for ; Fri, 23 Feb 2024 15:31:31 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id znK6Tb0f9YAS for ; Fri, 23 Feb 2024 15:31:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=B3qKkjein579Kz0OT+Sh2MG3bwpgvqkPDygadJpC1R8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=NdIAbADMbRVsAe+AXzkhH3A5kLpD6QMzvxn41yu8PylpE1iHSnW1L0C5VuO4+keJp Bd5LnzVCPs2XtdF+WQINygXYDoIjKpeXGdk2gSsytleX4f2AmH593naQu+Vwff+9F4 0CxffHA+Luly3n4u9aTsDYkZVPtKXo4iK1/E7vrsvg2RKaeE/u3wLvPHQhduCf/4F+ YZa7Xu0sQjBjwPZwduVR3DyCYdMcCja91uLQPs1QSvtjKdhFp4mzZvbfwizAoJa5is 48mp/gDjofTG0/e1D01vYqqy+sMfqzNM/Oe9dxnOemKPvtVEMKi/QTakUYFtDZS7UJ MjSBiVCRFme/g== 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 895484D42 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 6A52B3A1AF2 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:35 +0100 Message-ID: <20240223143115.16521-14-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/38] lavu/opt: factor per-type dispatch out of av_opt_get() 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: KYNZX59u6uWR Will be useful in following commits. --- libavutil/opt.c | 220 ++++++++++++++++++++++++++---------------------- 1 file changed, 121 insertions(+), 99 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 8ee89237c5..0ca6d4d555 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -834,13 +834,123 @@ static void format_duration(char *buf, size_t size, int64_t d) *(--e) = 0; } +static int opt_get_elem(const AVOption *o, uint8_t **pbuf, size_t buf_len, + void *dst, int search_flags) +{ + int ret; + + switch (o->type) { + case AV_OPT_TYPE_BOOL: + ret = snprintf(*pbuf, buf_len, "%s", get_bool_name(*(int *)dst)); + break; + case AV_OPT_TYPE_FLAGS: + ret = snprintf(*pbuf, buf_len, "0x%08X", *(int *)dst); + break; + case AV_OPT_TYPE_INT: + ret = snprintf(*pbuf, buf_len, "%d", *(int *)dst); + break; + case AV_OPT_TYPE_INT64: + ret = snprintf(*pbuf, buf_len, "%"PRId64, *(int64_t *)dst); + break; + case AV_OPT_TYPE_UINT64: + ret = snprintf(*pbuf, buf_len, "%"PRIu64, *(uint64_t *)dst); + break; + case AV_OPT_TYPE_FLOAT: + ret = snprintf(*pbuf, buf_len, "%f", *(float *)dst); + break; + case AV_OPT_TYPE_DOUBLE: + ret = snprintf(*pbuf, buf_len, "%f", *(double *)dst); + break; + case AV_OPT_TYPE_VIDEO_RATE: + case AV_OPT_TYPE_RATIONAL: + ret = snprintf(*pbuf, buf_len, "%d/%d", ((AVRational *)dst)->num, ((AVRational *)dst)->den); + break; + case AV_OPT_TYPE_CONST: + ret = snprintf(*pbuf, buf_len, "%"PRId64, o->default_val.i64); + break; + case AV_OPT_TYPE_STRING: + if (*(uint8_t **)dst) { + *pbuf = av_strdup(*(uint8_t **)dst); + } else if (search_flags & AV_OPT_ALLOW_NULL) { + *pbuf = NULL; + return 0; + } else { + *pbuf = av_strdup(""); + } + return *pbuf ? 0 : AVERROR(ENOMEM); + case AV_OPT_TYPE_BINARY: { + const uint8_t *bin; + int len; + + if (!*(uint8_t **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { + *pbuf = NULL; + return 0; + } + len = *(int *)(((uint8_t *)dst) + sizeof(uint8_t *)); + if ((uint64_t)len * 2 + 1 > INT_MAX) + return AVERROR(EINVAL); + if (!(*pbuf = av_malloc(len * 2 + 1))) + return AVERROR(ENOMEM); + if (!len) { + *pbuf[0] = '\0'; + return 0; + } + bin = *(uint8_t **)dst; + for (int i = 0; i < len; i++) + snprintf(*pbuf + i * 2, 3, "%02X", bin[i]); + return 0; + } + case AV_OPT_TYPE_IMAGE_SIZE: + ret = snprintf(*pbuf, buf_len, "%dx%d", ((int *)dst)[0], ((int *)dst)[1]); + break; + case AV_OPT_TYPE_PIXEL_FMT: + ret = snprintf(*pbuf, buf_len, "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum AVPixelFormat *)dst), "none")); + break; + case AV_OPT_TYPE_SAMPLE_FMT: + ret = snprintf(*pbuf, buf_len, "%s", (char *)av_x_if_null(av_get_sample_fmt_name(*(enum AVSampleFormat *)dst), "none")); + break; + case AV_OPT_TYPE_DURATION: { + int64_t i64 = *(int64_t *)dst; + format_duration(*pbuf, buf_len, i64); + ret = strlen(*pbuf); // no overflow possible, checked by an assert + break; + } + case AV_OPT_TYPE_COLOR: + ret = snprintf(*pbuf, buf_len, "0x%02x%02x%02x%02x", + (int)((uint8_t *)dst)[0], (int)((uint8_t *)dst)[1], + (int)((uint8_t *)dst)[2], (int)((uint8_t *)dst)[3]); + break; +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: { + int64_t i64 = *(int64_t *)dst; + ret = snprintf(*pbuf, buf_len, "0x%"PRIx64, i64); + break; + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + case AV_OPT_TYPE_CHLAYOUT: + ret = av_channel_layout_describe(dst, *pbuf, buf_len); + break; + case AV_OPT_TYPE_DICT: + if (!*(AVDictionary **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { + *pbuf = NULL; + return 0; + } + return av_dict_get_string(*(AVDictionary **)dst, (char **)pbuf, '=', ':'); + default: + return AVERROR(EINVAL); + } + + return ret; +} + int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) { void *dst, *target_obj; const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); - uint8_t *bin, buf[128]; - int len, i, ret; - int64_t i64; + uint8_t *out, buf[128]; + int ret; if (!o || !target_obj || (o->offset<=0 && o->type != AV_OPT_TYPE_CONST)) return AVERROR_OPTION_NOT_FOUND; @@ -851,107 +961,19 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) dst = (uint8_t *)target_obj + o->offset; buf[0] = 0; - switch (o->type) { - case AV_OPT_TYPE_BOOL: - ret = snprintf(buf, sizeof(buf), "%s", get_bool_name(*(int *)dst)); - break; - case AV_OPT_TYPE_FLAGS: - ret = snprintf(buf, sizeof(buf), "0x%08X", *(int *)dst); - break; - case AV_OPT_TYPE_INT: - ret = snprintf(buf, sizeof(buf), "%d", *(int *)dst); - break; - case AV_OPT_TYPE_INT64: - ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t *)dst); - break; - case AV_OPT_TYPE_UINT64: - ret = snprintf(buf, sizeof(buf), "%"PRIu64, *(uint64_t *)dst); - break; - case AV_OPT_TYPE_FLOAT: - ret = snprintf(buf, sizeof(buf), "%f", *(float *)dst); - break; - case AV_OPT_TYPE_DOUBLE: - ret = snprintf(buf, sizeof(buf), "%f", *(double *)dst); - break; - case AV_OPT_TYPE_VIDEO_RATE: - case AV_OPT_TYPE_RATIONAL: - ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational *)dst)->num, ((AVRational *)dst)->den); - break; - case AV_OPT_TYPE_CONST: - ret = snprintf(buf, sizeof(buf), "%"PRId64, o->default_val.i64); - break; - case AV_OPT_TYPE_STRING: - if (*(uint8_t **)dst) { - *out_val = av_strdup(*(uint8_t **)dst); - } else if (search_flags & AV_OPT_ALLOW_NULL) { - *out_val = NULL; - return 0; - } else { - *out_val = av_strdup(""); - } - return *out_val ? 0 : AVERROR(ENOMEM); - case AV_OPT_TYPE_BINARY: - if (!*(uint8_t **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { - *out_val = NULL; - return 0; - } - len = *(int *)(((uint8_t *)dst) + sizeof(uint8_t *)); - if ((uint64_t)len * 2 + 1 > INT_MAX) - return AVERROR(EINVAL); - if (!(*out_val = av_malloc(len * 2 + 1))) - return AVERROR(ENOMEM); - if (!len) { - *out_val[0] = '\0'; - return 0; - } - bin = *(uint8_t **)dst; - for (i = 0; i < len; i++) - snprintf(*out_val + i * 2, 3, "%02X", bin[i]); - return 0; - case AV_OPT_TYPE_IMAGE_SIZE: - ret = snprintf(buf, sizeof(buf), "%dx%d", ((int *)dst)[0], ((int *)dst)[1]); - break; - case AV_OPT_TYPE_PIXEL_FMT: - ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum AVPixelFormat *)dst), "none")); - break; - case AV_OPT_TYPE_SAMPLE_FMT: - ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_sample_fmt_name(*(enum AVSampleFormat *)dst), "none")); - break; - case AV_OPT_TYPE_DURATION: - i64 = *(int64_t *)dst; - format_duration(buf, sizeof(buf), i64); - ret = strlen(buf); // no overflow possible, checked by an assert - break; - case AV_OPT_TYPE_COLOR: - ret = snprintf(buf, sizeof(buf), "0x%02x%02x%02x%02x", - (int)((uint8_t *)dst)[0], (int)((uint8_t *)dst)[1], - (int)((uint8_t *)dst)[2], (int)((uint8_t *)dst)[3]); - break; -#if FF_API_OLD_CHANNEL_LAYOUT -FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: - i64 = *(int64_t *)dst; - ret = snprintf(buf, sizeof(buf), "0x%"PRIx64, i64); - break; -FF_ENABLE_DEPRECATION_WARNINGS -#endif - case AV_OPT_TYPE_CHLAYOUT: - ret = av_channel_layout_describe(dst, buf, sizeof(buf)); - break; - case AV_OPT_TYPE_DICT: - if (!*(AVDictionary **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { - *out_val = NULL; - return 0; - } - return av_dict_get_string(*(AVDictionary **)dst, (char **)out_val, '=', ':'); - default: - return AVERROR(EINVAL); + out = buf; + ret = opt_get_elem(o, &out, sizeof(buf), dst, search_flags); + if (ret < 0) + return ret; + if (out != buf) { + *out_val = out; + return 0; } if (ret >= sizeof(buf)) return AVERROR(EINVAL); - *out_val = av_strdup(buf); + *out_val = av_strdup(out); return *out_val ? 0 : AVERROR(ENOMEM); } From patchwork Fri Feb 23 13:58:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46482 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994313pze; Fri, 23 Feb 2024 06:35:22 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUnlMotKBjFiZzsY3QGV3DlD70dQyL16ikTwseWZVWntzf6zW5Hc8zKrAr0TgKoL7vy20oCpiHsbVIBtJxV6ZmdJ9mvymWC75jhNA== X-Google-Smtp-Source: AGHT+IEAwYf3tBPHWWnGZCNvk+aN6v0gfP7IqkIXAoaRoLZkp3ri31uwGwl0PxyqCNaon51oj56U X-Received: by 2002:a17:906:3685:b0:a3e:58df:fb08 with SMTP id a5-20020a170906368500b00a3e58dffb08mr1384656ejc.44.1708698922287; Fri, 23 Feb 2024 06:35:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698922; cv=none; d=google.com; s=arc-20160816; b=0N0f/WJO6MadyYAFe6j1c/RnutF9ufazuhmAZGPhd1HgEC1KHMFWnK4/t4F0Ctm+vq afThes17P1A0m6eRSVzbEpHn+Gpn0iBt+hyD0UyZbQjOQFHKfhLbyRbvnu89u8OP+KZT hSnc3hUKS33uhgyBvvsJOsGRoeOli2v83PZDmfS7Q5mnsmv/NjG99qCB2jMRMT+y5NiL ca+o0RwTGUWCBsy7JNZeoJJP7igtel0nv+LrdPjCwytAWNGoAhVTx3jK+GeG0tpJ98go yOOsV6UgLEZZ/dRu0lmnnnrucd8DKphVI/NFdFsS4jvESd3JGHdyWpUOzuV5c7+ZOSg/ 0oMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=l1opcVAwHPCcsw15FmBUfPfv851OxpmMsf2ZCC3eUu8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Tc0dyvt2HF9koyM+AhU0TQ6OHSTY1uv9JKAXimEgLNf6F1WcobctEqlx0/CVArJzj0 QOBjOUDhm5yUhRpWxRCHyQfskP87sluC3zJFpNZvMHm/bEpJVPNIvjmABGPHMIqNCrPH NkJ6H4K1uX7hNuOHsP4ouSyOGbLlrLDm1mhaGlpB6UGH7xfcNfcpuhiO4ZNovvDjIE34 l4Mjszsqa0xCZAscYH3hfx+6k9Np3zdH2vw6ZoACmR1nrq0r730xDTMUvs5jXh98c0Jq +sGu5Li1cR8tzHIG3QkZzMtBmkEbTYRv60MBTPq585Zbp7lGCA/P9s0F/Btkh2acz7U4 wG+g==; 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=MA9hgbXM; 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 y15-20020a170906070f00b00a3f033ce7e8si3456966ejb.243.2024.02.23.06.35.21; Fri, 23 Feb 2024 06:35:22 -0800 (PST) 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=MA9hgbXM; 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 A9EFF68CB35; Fri, 23 Feb 2024 16:32:04 +0200 (EET) 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 2C98F68C6BD for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=MA9hgbXM; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id E6A60448A for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 9DSZgaFcC-QV for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=BpOlG4dUyzGJgRKs4xVXDH4FEVrAo3LBvIIBANgY8zU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=MA9hgbXMONB6iaXOfnk3VwkEaszOKmYqiKxgDckXskp7d7JfXTQKamHs2fYZ0MZtv 70YxJE285YBuD2sTr87KQnVf1kg/pBrSM8Z/K6KnxIa051N0ikM4QmEHSxa4oPtg69 uqPw4utvoeFSWweWi6Bs+GYu1yQVrRLeUJfQifuoKXg2v3p4ul2/rrQQQBmxBIaPyx aeHvEGDAUCgNrvPRyra0KbH+m2FlW7KXTlf+neo9gra6Zoi97T1CYefUiarKA+mNiO deCqkoouVb2f/6KVZ09JN3uIFMnZX0kIbwDS2KBb67bMAaoG9Fe+LrcyxmkqwRvRHx yzESfUgdBPFdA== 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 8A0924D46 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 75A633A1B33 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:36 +0100 Message-ID: <20240223143115.16521-15-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/38] lavu/opt: factor per-type dispatch out of av_opt_set() 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: WdpLmLi4AXw3 Will be useful in following commits. --- libavutil/opt.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 0ca6d4d555..ebc8063dc6 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -484,13 +484,11 @@ static int set_string_channel_layout(void *obj, const AVOption *o, return av_channel_layout_from_string(channel_layout, val); } -int av_opt_set(void *obj, const char *name, const char *val, int search_flags) +static int opt_set_elem(void *obj, void *target_obj, const AVOption *o, + const char *val, void *dst) { - int ret = 0; - void *dst, *target_obj; - const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); - if (!o || !target_obj) - return AVERROR_OPTION_NOT_FOUND; + int ret; + FF_DISABLE_DEPRECATION_WARNINGS if (!val && (o->type != AV_OPT_TYPE_STRING && o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT && @@ -503,13 +501,6 @@ FF_DISABLE_DEPRECATION_WARNINGS return AVERROR(EINVAL); FF_ENABLE_DEPRECATION_WARNINGS - if (o->flags & AV_OPT_FLAG_READONLY) - return AVERROR(EINVAL); - - if (o->flags & AV_OPT_FLAG_DEPRECATED) - av_log(obj, AV_LOG_WARNING, "The \"%s\" option is deprecated: %s\n", name, o->help); - - dst = ((uint8_t *)target_obj) + o->offset; switch (o->type) { case AV_OPT_TYPE_BOOL: return set_string_bool(obj, o, val, dst); @@ -589,6 +580,24 @@ FF_ENABLE_DEPRECATION_WARNINGS return AVERROR(EINVAL); } +int av_opt_set(void *obj, const char *name, const char *val, int search_flags) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + + if (o->flags & AV_OPT_FLAG_READONLY) + return AVERROR(EINVAL); + + if (o->flags & AV_OPT_FLAG_DEPRECATED) + av_log(obj, AV_LOG_WARNING, "The \"%s\" option is deprecated: %s\n", name, o->help); + + dst = ((uint8_t *)target_obj) + o->offset; + + return opt_set_elem(obj, target_obj, o, val, dst); +} + #define OPT_EVAL_NUMBER(name, opttype, vartype) \ int av_opt_eval_ ## name(void *obj, const AVOption *o, \ const char *val, vartype *name ## _out) \ From patchwork Fri Feb 23 13:58:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46465 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp992678pze; Fri, 23 Feb 2024 06:32:39 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXRWG0M9Lkf0JUGlHmw7ZY94dHL4WBVm5YvYGudILtygVuPUZWvASLKSW3Uzl+9Q62FNSt0zDirWLk/3uXjX1Y3hX7XImOFtFgEcA== X-Google-Smtp-Source: AGHT+IFavn8nVWS1GNZYBL518m7JQ/Vx1U+dg3WsfLbQ02Vth9Z4pzNp6uqfebQH6NtYRpCZP9jk X-Received: by 2002:a50:9fc6:0:b0:562:1084:46c with SMTP id c64-20020a509fc6000000b005621084046cmr62322edf.0.1708698759713; Fri, 23 Feb 2024 06:32:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698759; cv=none; d=google.com; s=arc-20160816; b=pjcxVo6CfMBPNi1uiZ98AwYqtchGO9t0Xao43M+J7cMkMU/EQ9hGxrKLDcP9uD0oms pd50D7BluTLNPQmJaSB5kurlGuCrpVAHq1sO6Ner8hkijoxGouh0KEWiSMif+fI3Z9Hc pTTwHiaklSs0TSuTl/WGk0WuD/qFEcIB0H/Vpvdmv7RUHnCcbFplt6X+yCQjfzAY2Caj WnR/Y6fAutMp9cNB9O+aGf+je5ASWPDq79L9FpC2Rxbai7KNnVQFzND8NsPspL58gZOn yc/O712rb0c/mV7Onl+LfykT+S+t96ljQjKTEbdQYBXdjxqzknZ/I855clQdyhgQkci4 3Ezg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=sEElVY8rsnlLX1K2GiWTZATZtPEdWlVVYFWxPeCjYyc=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=kKVDWVGYqtQjX0CKFu31h8SFXKw/GGQF8pE1Q/GXG5FtiiJ9QjBb9Ad6KQG8qj8UeL KKqidW4W0HPiW3Gfb4WxIUpcGGgx8eOfCMJzDwUcKWsGGms+DW6E01wN+Q9mdI3CBEoM dzgv0ZcdPmqLQR+/7941xgI8TLh7k8eD7PuPRxsevcxz+6RO4SaeVt5Uns0nhQAu3i8f 2pAENXXRSuv9b/wjUcnxYoqj/TMFUE9a/JAJy7ZfnAGc38L5ywxDAl7B2drVdDUtradJ /t9p4nwly9lB84paXmUvVFnvqLzZp/t9O7GZ9AWTpQyLCcvbC5ukNbGSJEEFP8fyuPc1 oOrQ==; 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="XqOvu/6j"; 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 g15-20020a0564021ecf00b00564409f2e72si5586901edg.673.2024.02.23.06.32.39; Fri, 23 Feb 2024 06:32:39 -0800 (PST) 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="XqOvu/6j"; 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 B67E668C8F8; Fri, 23 Feb 2024 16:31:44 +0200 (EET) 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 863A168C62C for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=XqOvu/6j; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 5FF6B4D42 for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 9XkSJ8-fYWu5 for ; Fri, 23 Feb 2024 15:31:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=40PdmaJswHoZqnkCiostZrwgrnd0xazd3x1oTTgDV3A=; h=From:To:Subject:Date:In-Reply-To:References:From; b=XqOvu/6jdszvcWsMfZ2kWoQrTBmIcL7HQoBZj3x4bAUJztCNJv3GbgU3jtxrwARxs a7phBsRjV2ARu+QE6ctgo+CjHIfRfWdlNjIpERhzilTWFY+8lDwaCsKNl5K1kvYeEs ue0FLEavWlUG6azPNQKHwsv5e8MNZGAWmApgE5LvMybd8uZZk7HA0aFuR+Y38pa652 Aio7eNUhiFnMAXz4fqPHhyMtxGjYfstDYLauQJTUVVdlAoiAjXCxHCnk2nqki9qgqI QnZCHEatldXtlzhTILV+JO7KA0hcT9tL6zGoVw1Fyg7E8gI0vNP/sn6So8kYPDc6FK gSi3flvrRWT9A== 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 89AA64D44 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 81E043A1DF9 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:37 +0100 Message-ID: <20240223143115.16521-16-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 15/38] lavu/opt: add array options 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: NcYheczTbszn AVOption.array_max_size is added before AVOption.unit to avoid increasing sizeof(AVOption). --- doc/APIchanges | 3 + libavutil/opt.c | 344 ++++++++++++++++++++++++++++++++++++------ libavutil/opt.h | 26 ++++ libavutil/tests/opt.c | 34 +++++ tests/ref/fate/opt | 23 ++- 5 files changed, 385 insertions(+), 45 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index d26110b285..371fd2f465 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2024-02-xx - xxxxxxxxxx - lavu 58.xx.100 - opt.h + Add AV_OPT_FLAG_ARRAY and AVOption.array_max_size. + 2024-02-21 - xxxxxxxxxx - lavc 60.40.100 - avcodec.h Deprecate AV_INPUT_BUFFER_MIN_SIZE without replacement. diff --git a/libavutil/opt.c b/libavutil/opt.c index ebc8063dc6..88236660a1 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -56,6 +56,77 @@ const AVOption *av_opt_next(const void *obj, const AVOption *last) return NULL; } +static const size_t opt_elem_size[] = { + [AV_OPT_TYPE_FLAGS] = sizeof(unsigned), + [AV_OPT_TYPE_INT] = sizeof(int), + [AV_OPT_TYPE_INT64] = sizeof(int64_t), + [AV_OPT_TYPE_UINT64] = sizeof(uint64_t), + [AV_OPT_TYPE_DOUBLE] = sizeof(double), + [AV_OPT_TYPE_FLOAT] = sizeof(float), + [AV_OPT_TYPE_STRING] = sizeof(char *), + [AV_OPT_TYPE_RATIONAL] = sizeof(AVRational), + [AV_OPT_TYPE_BINARY] = sizeof(uint8_t *), + [AV_OPT_TYPE_DICT] = sizeof(AVDictionary *), + [AV_OPT_TYPE_IMAGE_SIZE] = sizeof(int[2]), + [AV_OPT_TYPE_VIDEO_RATE] = sizeof(AVRational), + [AV_OPT_TYPE_PIXEL_FMT] = sizeof(int), + [AV_OPT_TYPE_SAMPLE_FMT] = sizeof(int), + [AV_OPT_TYPE_DURATION] = sizeof(int64_t), + [AV_OPT_TYPE_COLOR] = sizeof(uint8_t[4]), +#if FF_API_OLD_CHANNEL_LAYOUT + [AV_OPT_TYPE_CHANNEL_LAYOUT]= sizeof(uint64_t), +#endif + [AV_OPT_TYPE_CHLAYOUT] = sizeof(AVChannelLayout), + [AV_OPT_TYPE_BOOL] = sizeof(int), +}; + +static uint8_t opt_array_sep(const AVOption *o) +{ + av_assert1(o->flags & AV_OPT_FLAG_ARRAY); + return o->default_val.str ? o->default_val.str[0] : ','; +} + +static void *opt_array_pelem(const AVOption *o, void *array, unsigned idx) +{ + av_assert1(o->flags & AV_OPT_FLAG_ARRAY); + return (uint8_t *)array + idx * opt_elem_size[o->type]; +} + +static unsigned *opt_array_pcount(void *parray) +{ + return (unsigned *)((void **)parray + 1); +} + +static void opt_free_elem(const AVOption *o, void *ptr) +{ + switch (o->type) { + case AV_OPT_TYPE_STRING: + case AV_OPT_TYPE_BINARY: + av_freep(ptr); + break; + + case AV_OPT_TYPE_DICT: + av_dict_free((AVDictionary **)ptr); + break; + + case AV_OPT_TYPE_CHLAYOUT: + av_channel_layout_uninit((AVChannelLayout *)ptr); + break; + + default: + break; + } +} + +static void opt_free_array(const AVOption *o, void *parray, unsigned *count) +{ + for (unsigned i = 0; i < *count; i++) + opt_free_elem(o, opt_array_pelem(o, *(void **)parray, i)); + + av_freep(parray); + *count = 0; +} + static int read_number(const AVOption *o, const void *dst, double *num, int *den, int64_t *intnum) { switch (o->type) { @@ -580,6 +651,76 @@ FF_ENABLE_DEPRECATION_WARNINGS return AVERROR(EINVAL); } +static int opt_set_array(void *obj, void *target_obj, const AVOption *o, + const char *val, void *dst) +{ + const size_t elem_size = opt_elem_size[o->type]; + const uint8_t sep = opt_array_sep(o); + uint8_t *str = NULL; + + void *elems = NULL; + unsigned nb_elems = 0; + int ret; + + if (val && *val) { + str = av_malloc(strlen(val) + 1); + if (!str) + return AVERROR(ENOMEM); + } + + // split and unescape the string + while (val && *val) { + uint8_t *p = str; + void *tmp; + + if (o->array_max_size && nb_elems >= o->array_max_size) { + av_log(obj, AV_LOG_ERROR, + "Cannot assign more than %u elements to array option %s\n", + o->array_max_size, o->name); + ret = AVERROR(EINVAL); + goto fail; + } + + for (; *val; val++, p++) { + if (*val == '\\' && val[1]) + val++; + else if (*val == sep) { + val++; + break; + } + *p = *val; + } + *p = 0; + + tmp = av_realloc_array(elems, nb_elems + 1, elem_size); + if (!tmp) { + ret = AVERROR(ENOMEM); + goto fail; + } + elems = tmp; + + tmp = opt_array_pelem(o, elems, nb_elems); + memset(tmp, 0, elem_size); + + ret = opt_set_elem(obj, target_obj, o, str, tmp); + if (ret < 0) + goto fail; + nb_elems++; + } + av_freep(&str); + + opt_free_array(o, dst, opt_array_pcount(dst)); + + *((void **)dst) = elems; + *opt_array_pcount(dst) = nb_elems; + + return 0; +fail: + av_freep(&str); + opt_free_array(o, &elems, &nb_elems); + return ret; +} + int av_opt_set(void *obj, const char *name, const char *val, int search_flags) { void *dst, *target_obj; @@ -595,14 +736,16 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) dst = ((uint8_t *)target_obj) + o->offset; - return opt_set_elem(obj, target_obj, o, val, dst); + return ((o->flags & AV_OPT_FLAG_ARRAY) ? + opt_set_array : opt_set_elem)(obj, target_obj, o, val, dst); } #define OPT_EVAL_NUMBER(name, opttype, vartype) \ int av_opt_eval_ ## name(void *obj, const AVOption *o, \ const char *val, vartype *name ## _out) \ { \ - if (!o || o->type != opttype || o->flags & AV_OPT_FLAG_READONLY) \ + if (!o || o->type != opttype || o->flags & AV_OPT_FLAG_READONLY || \ + o->flags & AV_OPT_FLAG_ARRAY) \ return AVERROR(EINVAL); \ return set_string_number(obj, obj, o, val, name ## _out); \ } @@ -623,7 +766,7 @@ static int set_number(void *obj, const char *name, double num, int den, int64_t if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->flags & AV_OPT_FLAG_READONLY) + if (o->flags & (AV_OPT_FLAG_READONLY | AV_OPT_FLAG_ARRAY)) return AVERROR(EINVAL); dst = ((uint8_t *)target_obj) + o->offset; @@ -656,7 +799,8 @@ int av_opt_set_bin(void *obj, const char *name, const uint8_t *val, int len, int if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_BINARY || o->flags & AV_OPT_FLAG_READONLY) + if (o->type != AV_OPT_TYPE_BINARY || + o->flags & (AV_OPT_FLAG_READONLY | AV_OPT_FLAG_ARRAY)) return AVERROR(EINVAL); ptr = len ? av_malloc(len) : NULL; @@ -682,9 +826,10 @@ int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_ if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_IMAGE_SIZE) { + if (o->type != AV_OPT_TYPE_IMAGE_SIZE || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value set by option '%s' is not an image size.\n", o->name); + "The value set by option '%s' is not a scalar image size.\n", o->name); return AVERROR(EINVAL); } if (w<0 || h<0) { @@ -704,9 +849,11 @@ int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int searc if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_VIDEO_RATE) { + if (o->type != AV_OPT_TYPE_VIDEO_RATE || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value set by option '%s' is not a video rate.\n", o->name); + "The value set by option '%s' is not a scalar video rate.\n", + o->name); return AVERROR(EINVAL); } if (val.num <= 0 || val.den <= 0) @@ -724,9 +871,10 @@ static int set_format(void *obj, const char *name, int fmt, int search_flags, if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != type) { + if (o->type != type || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value set by option '%s' is not a %s format", name, desc); + "The value set by option '%s' is not a scalar %s format", name, desc); return AVERROR(EINVAL); } @@ -762,9 +910,10 @@ int av_opt_set_channel_layout(void *obj, const char *name, int64_t cl, int searc if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_CHANNEL_LAYOUT) { + if (o->type != AV_OPT_TYPE_CHANNEL_LAYOUT || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value set by option '%s' is not a channel layout.\n", o->name); + "The value set by option '%s' is not a scalar channel layout.\n", o->name); return AVERROR(EINVAL); } *(int64_t *)(((uint8_t *)target_obj) + o->offset) = cl; @@ -782,7 +931,7 @@ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->flags & AV_OPT_FLAG_READONLY) + if (o->flags & (AV_OPT_FLAG_READONLY | AV_OPT_FLAG_ARRAY)) return AVERROR(EINVAL); dst = (AVDictionary **)(((uint8_t *)target_obj) + o->offset); @@ -802,6 +951,8 @@ int av_opt_set_chlayout(void *obj, const char *name, if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; + if (o->flags & AV_OPT_FLAG_ARRAY) + return AVERROR(EINVAL); dst = (AVChannelLayout*)((uint8_t*)target_obj + o->offset); @@ -954,6 +1105,66 @@ FF_ENABLE_DEPRECATION_WARNINGS return ret; } +static int opt_get_array(const AVOption *o, void *dst, uint8_t **out_val) +{ + const unsigned count = *opt_array_pcount(dst); + const uint8_t sep = opt_array_sep(o); + + uint8_t *str = NULL; + size_t str_len = 0; + int ret; + + *out_val = NULL; + + for (unsigned i = 0; i < count; i++) { + uint8_t buf[128], *out = buf; + size_t out_len; + + ret = opt_get_elem(o, &out, sizeof(buf), + opt_array_pelem(o, *(void **)dst, i), 0); + if (ret < 0) + goto fail; + + out_len = strlen(out); + if (out_len > SIZE_MAX / 2 - !!i || + !!i + out_len * 2 > SIZE_MAX - str_len - 1) { + ret = AVERROR(ERANGE); + goto fail; + } + + // terminator escaping separator + // ↓ ↓ ↓ + ret = av_reallocp(&str, str_len + 1 + out_len * 2 + !!i); + if (ret < 0) + goto fail; + + // add separator if needed + if (i) + str[str_len++] = sep; + + // escape the element + for (unsigned j = 0; j < out_len; j++) { + uint8_t val = out[j]; + if (val == sep || val == '\\') + str[str_len++] = '\\'; + str[str_len++] = val; + } + str[str_len] = 0; + +fail: + if (out != buf) + av_freep(&out); + if (ret < 0) { + av_freep(&str); + return ret; + } + } + + *out_val = str; + + return 0; +} + int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) { void *dst, *target_obj; @@ -969,8 +1180,19 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) dst = (uint8_t *)target_obj + o->offset; - buf[0] = 0; + if (o->flags & AV_OPT_FLAG_ARRAY) { + ret = opt_get_array(o, dst, out_val); + if (ret < 0) + return ret; + if (!*out_val && !(search_flags & AV_OPT_ALLOW_NULL)) { + *out_val = av_strdup(""); + if (!*out_val) + return AVERROR(ENOMEM); + } + return 0; + } + buf[0] = 0; out = buf; ret = opt_get_elem(o, &out, sizeof(buf), dst, search_flags); if (ret < 0) @@ -993,6 +1215,8 @@ static int get_number(void *obj, const char *name, double *num, int *den, int64_ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; + if (o->flags & AV_OPT_FLAG_ARRAY) + return AVERROR(EINVAL); dst = ((uint8_t *)target_obj) + o->offset; @@ -1048,9 +1272,10 @@ int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_IMAGE_SIZE) { + if (o->type != AV_OPT_TYPE_IMAGE_SIZE || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value for option '%s' is not an image size.\n", name); + "The value for option '%s' is not a scalar image size.\n", name); return AVERROR(EINVAL); } @@ -1083,9 +1308,10 @@ static int get_format(void *obj, const char *name, int search_flags, int *out_fm const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != type) { + if (o->type != type || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value for option '%s' is not a %s format.\n", desc, name); + "The value for option '%s' is not a scalar %s format.\n", desc, name); return AVERROR(EINVAL); } @@ -1112,9 +1338,10 @@ int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_CHANNEL_LAYOUT) { + if (o->type != AV_OPT_TYPE_CHANNEL_LAYOUT || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value for option '%s' is not a channel layout.\n", name); + "The value for option '%s' is not a scalar channel layout.\n", name); return AVERROR(EINVAL); } @@ -1131,9 +1358,10 @@ int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannel const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_CHLAYOUT) { + if (o->type != AV_OPT_TYPE_CHLAYOUT || + o->flags & AV_OPT_FLAG_ARRAY) { av_log(obj, AV_LOG_ERROR, - "The value for option '%s' is not a channel layout.\n", name); + "The value for option '%s' is not a scalar channel layout.\n", name); return AVERROR(EINVAL); } @@ -1149,7 +1377,8 @@ int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDiction if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (o->type != AV_OPT_TYPE_DICT) + if (o->type != AV_OPT_TYPE_DICT || + o->flags & AV_OPT_FLAG_ARRAY) return AVERROR(EINVAL); src = *(AVDictionary **)(((uint8_t *)target_obj) + o->offset); @@ -1165,7 +1394,8 @@ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name) field ? field->unit : NULL, 0, 0); int64_t res; - if (!field || !flag || flag->type != AV_OPT_TYPE_CONST || + if (!field || !(field->flags & AV_OPT_FLAG_ARRAY) || + !flag || flag->type != AV_OPT_TYPE_CONST || av_opt_get_int(obj, field_name, 0, &res) < 0) return 0; return res & flag->default_val.i64; @@ -1284,8 +1514,12 @@ static void log_type(void *av_log_obj, const AVOption *o, if (o->type == AV_OPT_TYPE_CONST && parent_type == AV_OPT_TYPE_INT) av_log(av_log_obj, AV_LOG_INFO, "%-12"PRId64" ", o->default_val.i64); - else if (o->type < FF_ARRAY_ELEMS(desc) && desc[o->type]) - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", desc[o->type]); + else if (o->type < FF_ARRAY_ELEMS(desc) && desc[o->type]) { + if (o->flags & AV_OPT_FLAG_ARRAY) + av_log(av_log_obj, AV_LOG_INFO, "×%-11s ", desc[o->type]); + else + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", desc[o->type]); + } else av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); } @@ -1470,6 +1704,22 @@ void av_opt_set_defaults2(void *s, int mask, int flags) if (opt->flags & AV_OPT_FLAG_READONLY) continue; + if (opt->flags & AV_OPT_FLAG_ARRAY) { + const char *val = opt->default_val.str; + if (val) { + const char sep = *val++; + + // make sure people don't forget to set the separator correctly + av_assert0(sep && + (sep < 'a' || sep > 'z') && + (sep < 'A' || sep > 'Z') && + (sep < '0' || sep > '9')); + + opt_set_array(s, s, opt, val, dst); + } + continue; + } + switch (opt->type) { case AV_OPT_TYPE_CONST: /* Nothing to be done here */ @@ -1717,23 +1967,12 @@ void av_opt_free(void *obj) { const AVOption *o = NULL; while ((o = av_opt_next(obj, o))) { - switch (o->type) { - case AV_OPT_TYPE_STRING: - case AV_OPT_TYPE_BINARY: - av_freep((uint8_t *)obj + o->offset); - break; + void *pitem = (uint8_t *)obj + o->offset; - case AV_OPT_TYPE_DICT: - av_dict_free((AVDictionary **)(((uint8_t *)obj) + o->offset)); - break; - - case AV_OPT_TYPE_CHLAYOUT: - av_channel_layout_uninit((AVChannelLayout *)(((uint8_t *)obj) + o->offset)); - break; - - default: - break; - } + if (o->flags & AV_OPT_FLAG_ARRAY) + opt_free_array(o, pitem, opt_array_pcount(pitem)); + else + opt_free_elem(o, pitem); } } @@ -1835,7 +2074,9 @@ const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter) void *av_opt_ptr(const AVClass *class, void *obj, const char *name) { const AVOption *opt= av_opt_find2(&class, name, NULL, 0, AV_OPT_SEARCH_FAKE_OBJ, NULL); - if(!opt) + + // no direct access to array-type options + if (!opt || (opt->flags & AV_OPT_FLAG_ARRAY)) return NULL; return (uint8_t*)obj + opt->offset; } @@ -2067,6 +2308,23 @@ int av_opt_is_set_to_default(void *obj, const AVOption *o) dst = ((uint8_t*)obj) + o->offset; + if (o->flags & AV_OPT_FLAG_ARRAY) { + uint8_t *val; + + ret = opt_get_array(o, dst, &val); + if (ret < 0) + return ret; + + if (!!val != !!o->default_val.str) + ret = 0; + else if (val) + ret = !strcmp(val, o->default_val.str + 1); + + av_freep(&val); + + return ret; + } + switch (o->type) { case AV_OPT_TYPE_CONST: return 1; diff --git a/libavutil/opt.h b/libavutil/opt.h index e34b8506f8..c5678c0296 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -288,6 +288,16 @@ enum AVOptionType{ */ #define AV_OPT_FLAG_CHILD_CONSTS (1 << 18) +/** + * The option is an array. + * + * When adding array options to an object, @ref AVOption.offset should refer to + * a pointer corresponding to the option type. The pointer should be immediately + * followed by an unsigned int that will store the number of elements in the + * array. + */ +#define AV_OPT_FLAG_ARRAY (1 << 19) + /** * AVOption */ @@ -313,6 +323,16 @@ typedef struct AVOption { union { int64_t i64; double dbl; + + /** + * This member is always used for AV_OPT_FLAG_ARRAY options. When + * non-NULL, the first character of the string must be the separator to + * be used for (de)serializing lists to/from strings with av_opt_get(), + * av_opt_set(), and similar. The separator must not conflict with valid + * option names or be a backslash. When the value is null, comma is used + * as the separator. The rest of the string is parsed as for + * av_opt_set(). + */ const char *str; /* TODO those are unused now */ AVRational q; @@ -325,6 +345,12 @@ typedef struct AVOption { */ int flags; + /** + * For options flagged with AV_OPT_FLAG_ARRAY, this specifies the maximum + * number of elements that can be added to it. + */ + unsigned array_max_size; + /** * The logical unit to which the option belongs. Non-constant * options and corresponding named constants share the same diff --git a/libavutil/tests/opt.c b/libavutil/tests/opt.c index e2582cc93d..5b218b6b0a 100644 --- a/libavutil/tests/opt.c +++ b/libavutil/tests/opt.c @@ -57,6 +57,12 @@ typedef struct TestContext { int bool3; AVDictionary *dict1; AVDictionary *dict2; + + char **array_str; + unsigned nb_array_str; + + AVDictionary **array_dict; + unsigned nb_array_dict; } TestContext; #define OFFSET(x) offsetof(TestContext, x) @@ -93,6 +99,9 @@ static const AVOption test_options[]= { {"bool3", "set boolean value", OFFSET(bool3), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, 1 }, {"dict1", "set dictionary value", OFFSET(dict1), AV_OPT_TYPE_DICT, { .str = NULL}, 0, 0, 1 }, {"dict2", "set dictionary value", OFFSET(dict2), AV_OPT_TYPE_DICT, { .str = "happy=':-)'"}, 0, 0, 1 }, + {"array_str", "array of strings", OFFSET(array_str), AV_OPT_TYPE_STRING, { .str = "|str0|str\\|1|str\\\\2" }, .flags = AV_OPT_FLAG_ARRAY }, + // there are three levels of escaping - C string, array option, dict - so 8 backslashes are needed to get a literal one inside a dict key/val + {"array_dict", "array of dicts", OFFSET(array_dict), AV_OPT_TYPE_DICT, { .str = ",k00=v\\\\\\\\00:k01=v\\,01,k10=v\\\\=1\\\\:0" }, .flags = AV_OPT_FLAG_ARRAY }, { NULL }, }; @@ -146,6 +155,17 @@ int main(void) printf("flt=%.6f\n", test_ctx.flt); printf("dbl=%.6f\n", test_ctx.dbl); + for (unsigned i = 0; i < test_ctx.nb_array_str; i++) + printf("array_str[%u]=%s\n", i, test_ctx.array_str[i]); + + for (unsigned i = 0; i < test_ctx.nb_array_dict; i++) { + AVDictionary *d = test_ctx.array_dict[i]; + const AVDictionaryEntry *e = NULL; + + while ((e = av_dict_iterate(d, e))) + printf("array_dict[%u]: %s\t%s\n", i, e->key, e->value); + } + av_opt_show2(&test_ctx, NULL, -1, 0); av_opt_free(&test_ctx); @@ -177,6 +197,9 @@ int main(void) TestContext test_ctx = { 0 }; TestContext test2_ctx = { 0 }; const AVOption *o = NULL; + char *val = NULL; + int ret; + test_ctx.class = &test_class; test2_ctx.class = &test_class; @@ -209,6 +232,17 @@ int main(void) av_free(value1); av_free(value2); } + + // av_opt_set(NULL) with an array option resets it + ret = av_opt_set(&test_ctx, "array_dict", NULL, 0); + printf("av_opt_set(\"array_dict\", NULL) -> %d\n", ret); + printf("array_dict=%sNULL; nb_array_dict=%u\n", + test_ctx.array_dict ? "non-" : "", test_ctx.nb_array_dict); + + // av_opt_get() on an empty array should return a NULL string + ret = av_opt_get(&test_ctx, "array_dict", AV_OPT_ALLOW_NULL, (uint8_t**)&val); + printf("av_opt_get(\"array_dict\") -> %s\n", val ? val : "NULL"); + av_opt_free(&test_ctx); av_opt_free(&test2_ctx); } diff --git a/tests/ref/fate/opt b/tests/ref/fate/opt index 832f9cc8a9..4ed632fea8 100644 --- a/tests/ref/fate/opt +++ b/tests/ref/fate/opt @@ -17,6 +17,12 @@ binary_size=4 num64=1 flt=0.333333 dbl=0.333333 +array_str[0]=str0 +array_str[1]=str|1 +array_str[2]=str\2 +array_dict[0]: k00 v\00 +array_dict[0]: k01 v,01 +array_dict[1]: k10 v=1:0 TestContext AVOptions: -num E.......... set num (from 0 to 100) (default 0) -toggle E.......... set toggle (from 0 to 1) (default 1) @@ -45,6 +51,8 @@ TestContext AVOptions: -bool3 E.......... set boolean value (default false) -dict1 E.......... set dictionary value -dict2 E.......... set dictionary value (default "happy=':-)'") + -array_str × ........... array of strings (default "|str0|str\|1|str\\2") + -array_dict × ........... array of dicts (default ",k00=v\\\\00:k01=v\,01,k10=v\\=1\\:0") Testing av_opt_is_set_to_default() name: num default:1 error: @@ -74,6 +82,8 @@ name: bool2 default:0 error: name: bool3 default:1 error: name: dict1 default:1 error: name: dict2 default:0 error: +name: array_str default:0 error: +name:array_dict default:0 error: name: num default:1 error: name: toggle default:1 error: name: rational default:1 error: @@ -101,6 +111,8 @@ name: bool2 default:1 error: name: bool3 default:1 error: name: dict1 default:1 error: name: dict2 default:1 error: +name: array_str default:1 error: +name:array_dict default:1 error: Testing av_opt_get/av_opt_set() name: num get: 0 set: OK get: 0 OK @@ -127,9 +139,14 @@ name: bool2 get: true set: OK get: true name: bool3 get: false set: OK get: false OK name: dict1 get: set: OK get: OK name: dict2 get: happy=\:-) set: OK get: happy=\:-) OK +name: array_str get: str0|str\|1|str\\2 set: OK get: str0|str\|1|str\\2 OK +name: array_dict get: k00=v\\\\00:k01=v\,01,k10=v\\=1\\:0 set: OK get: k00=v\\\\00:k01=v\,01,k10=v\\=1\\:0 OK +av_opt_set("array_dict", NULL) -> 0 +array_dict=NULL; nb_array_dict=0 +av_opt_get("array_dict") -> NULL Test av_opt_serialize() -num=0,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-) +num=0,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-),array_str=str0|str\\|1|str\\\\2,array_dict=k00\=v\\\\\\\\00:k01\=v\\\,01\,k10\=v\\\\\=1\\\\:0 Setting entry with key 'num' to value '0' Setting entry with key 'toggle' to value '1' Setting entry with key 'rational' to value '1/1' @@ -154,7 +171,9 @@ Setting entry with key 'bool2' to value 'true' Setting entry with key 'bool3' to value 'false' Setting entry with key 'dict1' to value '' Setting entry with key 'dict2' to value 'happy=\:-)' -num=0,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-) +Setting entry with key 'array_str' to value 'str0|str\|1|str\\2' +Setting entry with key 'array_dict' to value 'k00=v\\\\00:k01=v\,01,k10=v\\=1\\:0' +num=0,toggle=1,rational=1/1,string=default,escape=\\\=\,,flags=0x00000001,size=200x300,pix_fmt=0bgr,sample_fmt=s16,video_rate=25/1,duration=0.001,color=0xffc0cbff,cl=hexagonal,bin=62696E00,bin1=,bin2=,num64=1,flt=0.333333,dbl=0.333333,bool1=auto,bool2=true,bool3=false,dict1=,dict2=happy\=\\:-),array_str=str0|str\\|1|str\\\\2,array_dict=k00\=v\\\\\\\\00:k01\=v\\\,01\,k10\=v\\\\\=1\\\\:0 Testing av_set_options_string() Setting options string '' From patchwork Fri Feb 23 13:58:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46472 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993499pze; Fri, 23 Feb 2024 06:34:00 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVSu7Yx92vwU/wBAUSsP+604aK2DrqoHINifY2TO7Z9mcncZPFfDf8zMxXuyJ8Ff00mDEWABLS06wKYwJy4K8lqzxxzrV7SZBYHXg== X-Google-Smtp-Source: AGHT+IEFzyXUmBVp7a82Afxnd/wdMw1F5W/sqGP59QKFh0ThF3msq1tzZJBs06Lc9EtQVbxTQXNw X-Received: by 2002:a17:906:2297:b0:a3f:8968:78dd with SMTP id p23-20020a170906229700b00a3f896878ddmr1325354eja.55.1708698840071; Fri, 23 Feb 2024 06:34:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698840; cv=none; d=google.com; s=arc-20160816; b=qbF1Q/gUhPPVeNel2us7VbLJ4DYurStb9HQYz+vSXiDUx0+NyZ9Qv0D4o4HM5OMVOM knFFEJP0u/ZCQsUV8+dApyIRXljVxmD9EBkAaOzVHUKzmpdFeLWUe1EOhsbd2eNsX3jo scZBE/U1OrslPW0QH86hEJGKEKgGLUp4b1ebZUlEDNvVIVnyTLIaJn/GVcLKKjFzsF2H 2oz62Fhl6PE/viNz7jJc2ubzARZzO3YFWJYDa8RJsfIn+RGkWJOrb6v6wjtXD5oZJwRF q/SI0q5Oi1E2LZn79Jyrzs5s40jU4voUXSKqD58BrULnpRKaaEMazZRE/rjxs4ZW2n97 h0Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=NcI3MzAOgMDmOLEkT7fZKJNqcxEwkKr5i+zJBdIYwL4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ZDLVVPs1puJtMI1bNA9HTLkLepF0YpD30sgaI07OJ/keFzrZgbBj8beEcIwRD3cB5m ADPTFQCrGnjFZZUTCkaqCyAsXiHbEeTiAf4SQ1gKPYeTBVkYN3MJOOSqulUegBz+5eIw pchGy/PlVBZ1sWciZZdQ/3i37r1Bmq7pwQbvdxhRoj30M7Rfag1W3tg4mLV5wywc7c2q 4EoKdY4NfQrWVHAyU5n+nwtcZ9V6yOPVf1Ktz298m630Yx21mfplsY7MXAUDKnMwM+n0 OWXhkh4Z93AVoCCKHS8NL1nGv4Llz4LErehMHLcMGrNj///JLChWTJQ4FnW0CPCokZRJ N1UA==; 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="f0fPwsZ/"; 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 w16-20020a170906b19000b00a3f0ee77ebfsi3118224ejy.309.2024.02.23.06.33.59; Fri, 23 Feb 2024 06:34:00 -0800 (PST) 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="f0fPwsZ/"; 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 E1BF068C6F3; Fri, 23 Feb 2024 16:31:53 +0200 (EET) 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 BA4EF68C65D for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=f0fPwsZ/; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 002BC4D3C for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id ztpFDsFXWywZ for ; Fri, 23 Feb 2024 15:31:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=dcAxA+wc/op5mFV2XxZpDbA4aVJqBZrfH9vMQdLcyhM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=f0fPwsZ/2IgapryeG3A6atZTzRTT25MTkT5nbhkIhBvzr47Sr0UaR/Peo3ubOHmFW FN8IfTV3NnBKO6YmAuCz5rr235zp1Od+jnFy5ySDXdXfKVqZSNAHc92bv9oj8/obeA usRH5j/MiL4jHcIV9F2FbVnGi3t1dR26TcL715PuDkBYd97xQJKNjXx0giXPBeuwiI wyAy8mRbJJWaIzKoRnrHPjr/rCIDcDvUI7vz7Bkx0XLHblosyc59Jm7xjQwrhu5KrW rhUyJ7zz8MuQYxFB9c6YQT36w+TtILP0GvHM3wtHmLip9keYPxLyydffd6qBzZQhlY CqH05HI7DKvmw== 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 8AD234D48 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 8D4163A1DFE for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:38 +0100 Message-ID: <20240223143115.16521-17-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/38] lavc: add a decoder option for configuring side data preference 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: /LK9U7hxjev0 This and the following commits fix #10857 --- doc/APIchanges | 3 +++ libavcodec/avcodec.h | 20 ++++++++++++++++++++ libavcodec/decode.c | 36 ++++++++++++++++++++++++++++++++++++ libavcodec/options_table.h | 12 ++++++++++++ 4 files changed, 71 insertions(+) diff --git a/doc/APIchanges b/doc/APIchanges index 371fd2f465..78744a674a 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2024-02-xx - xxxxxxxxxx - lavc 60.xx.100 - avcodec.h + Add AVCodecContext.[nb_]side_data_prefer_global. + 2024-02-xx - xxxxxxxxxx - lavu 58.xx.100 - opt.h Add AV_OPT_FLAG_ARRAY and AVOption.array_max_size. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 43859251cc..307a3e99db 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2120,6 +2120,26 @@ typedef struct AVCodecContext { * an error. */ int64_t frame_num; + + /** + * Decoding only. May be set by the caller before avcodec_open2() to an + * av_malloc()'ed array (or via AVOptions). Owned and freed by the decoder + * afterwards. + * + * By default, when some side data type is present both in global + * user-supplied coded_side_data and inside the coded bitstream, avcodec + * will propagate the latter to the decoded frame. + * + * This array contains a list of AVPacketSideDataType for which this + * preference should be switched, i.e. avcodec will prefer global side data + * over those in stored in the bytestream. It may also contain a single -1, + * in which case the preference is switched for all side data types. + */ + int *side_data_prefer_global; + /** + * Number of entries in side_data_prefer_global. + */ + unsigned nb_side_data_prefer_global; } AVCodecContext; /** diff --git a/libavcodec/decode.c b/libavcodec/decode.c index da6446d879..5524e229c2 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -60,6 +60,12 @@ typedef struct DecodeContext { * The caller has submitted a NULL packet on input. */ int draining_started; + + /** + * Bitmask indicating for which side data types we prefer global + * side data over per-packet. + */ + uint64_t side_data_pref_mask; } DecodeContext; static DecodeContext *decode_ctx(AVCodecInternal *avci) @@ -1744,6 +1750,7 @@ int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags) int ff_decode_preinit(AVCodecContext *avctx) { AVCodecInternal *avci = avctx->internal; + DecodeContext *dc = decode_ctx(avci); int ret = 0; /* if the decoder init function was already called previously, @@ -1804,6 +1811,35 @@ int ff_decode_preinit(AVCodecContext *avctx) avctx->export_side_data |= AV_CODEC_EXPORT_DATA_MVS; } + if (avctx->nb_side_data_prefer_global == 1 && + avctx->side_data_prefer_global[0] == -1) + dc->side_data_pref_mask = ~0ULL; + else { + for (unsigned i = 0; i < avctx->nb_side_data_prefer_global; i++) { + int val = avctx->side_data_prefer_global[i]; + + if (val < 0 || val >= AV_PKT_DATA_NB) { + av_log(avctx, AV_LOG_ERROR, "Invalid side data type: %d\n", val); + return AVERROR(EINVAL); + } + + for (unsigned j = 0; j < FF_ARRAY_ELEMS(sd_global_map); j++) { + if (sd_global_map[j].packet == val) { + val = sd_global_map[j].frame; + + // this code will need to be changed when we have more than + // 64 frame side data types + if (val >= 64) { + av_log(avctx, AV_LOG_ERROR, "Side data type too big\n"); + return AVERROR_BUG; + } + + dc->side_data_pref_mask |= 1ULL << val; + } + } + } + } + avci->in_pkt = av_packet_alloc(); avci->last_pkt_props = av_packet_alloc(); if (!avci->in_pkt || !avci->last_pkt_props) diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index ac32d8928a..2f4f60218c 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -41,6 +41,7 @@ #define E AV_OPT_FLAG_ENCODING_PARAM #define D AV_OPT_FLAG_DECODING_PARAM #define CC AV_OPT_FLAG_CHILD_CONSTS +#define AR AV_OPT_FLAG_ARRAY #define AV_CODEC_DEFAULT_BITRATE 200*1000 @@ -405,6 +406,17 @@ static const AVOption avcodec_options[] = { {"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"}, {"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D }, {"discard_damaged_percentage", "Percentage of damaged samples to discard a frame", OFFSET(discard_damaged_percentage), AV_OPT_TYPE_INT, {.i64 = 95 }, 0, 100, V|D }, +{"side_data_prefer_global", "Comma-separated list of side data types for which global headers are preferred over frame-level data", + OFFSET(side_data_prefer_global), AV_OPT_TYPE_INT, .min = -1, .max = INT_MAX, .flags = V|A|S|D|AR, .unit = "side_data_pkt" }, + {"replaygain", .default_val.i64 = AV_PKT_DATA_REPLAYGAIN, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"displaymatrix", .default_val.i64 = AV_PKT_DATA_DISPLAYMATRIX, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"spherical", .default_val.i64 = AV_PKT_DATA_SPHERICAL, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"stereo3d", .default_val.i64 = AV_PKT_DATA_STEREO3D, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"audio_service_type", .default_val.i64 = AV_PKT_DATA_AUDIO_SERVICE_TYPE, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"mastering_display_metadata", .default_val.i64 = AV_PKT_DATA_MASTERING_DISPLAY_METADATA, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"content_light_level", .default_val.i64 = AV_PKT_DATA_CONTENT_LIGHT_LEVEL, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"icc_profile", .default_val.i64 = AV_PKT_DATA_ICC_PROFILE, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, + {"dynamic_hdr10_plus", .default_val.i64 = AV_PKT_DATA_DYNAMIC_HDR10_PLUS, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" }, {NULL}, }; From patchwork Fri Feb 23 13:58:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46476 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993814pze; Fri, 23 Feb 2024 06:34:33 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVUN2EjhQWAf7c+fPk6/K2m3ZhlEXQhu7bIfZU9fBcPFql1iXiAsp19XMPNm0Xu+cJAN+ObMzJ5LS8xRlUeRtFF3druVYbAwijbOQ== X-Google-Smtp-Source: AGHT+IHm/0AiW7e4mbjTw4AVZwGkFytjjy2YLgWCvvARz5wGvo2gSqIGvD641WKeP/hlZfMx6U4R X-Received: by 2002:a17:906:b143:b0:a3e:e273:5316 with SMTP id bt3-20020a170906b14300b00a3ee2735316mr1573978ejb.58.1708698873470; Fri, 23 Feb 2024 06:34:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698873; cv=none; d=google.com; s=arc-20160816; b=XtT7qzlfomCNhzozFwYh5dKOu2qkU6F/ISLhgD7dORFI7tjeHx4QrHkUJMrjIYG/Ch zeM0PlIwV4JguViNt8d/uKU7iZnT8377/Axbh4MwLw2gZ4UjDyggjuLXNBSFhVrvQ56c VIP30GCgXQPgU0ZW4d9CfBS4rrwCcWXi7XtOEFHOZ3kT2cdZDGZYEyNP8Sbbw2fdiYQn b1FbkvyZtUjJW4VvnaHhM5X1MqB55eyJWKGLh59GX0mVvcQEaoc+KNponbEH7k6dezCm CYv4NwgPdSc5KXwKIJuxhIe7KxOfAqFuFWeASdeFPABne+LgmUVnQY3BwdFEmIAkHtQU dxIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=LzO+Y3jnPYkG0W5QTvSkVmYJuPtx8AHYsKYInss3bUI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=MnB0qQq/eMT/v2zjHXT2IshObdDhxjZPSQMWdirNwvsWAfnmmLXO2eKZ8Hku37dlgN uJBpZB6FHCHa86l3HnJswDALdMyq76uiDpI1nb9LYoE+YO7E5ZJ8Y0O1Vx8zyfR2HLnG oXEZRlPwLfP4VgWjQLna4GMuR6J+5yMFnfP9+A4DWsUJMT97WSIrFGzoivx/ohDmPF2E lNcF2hJNjm/ULWVaeI0s90edQoTMlQt7DfaZ1vYc9FQiFFCk0sGski1pjVaw5ktdEShk P8G70u3qQqLHwXMSIlsDCYAaJhKQAH2nlJJfuNFukgmkIms8G1tVVFFoDDbvL9jni8hm xIOA==; 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="XH+iNO/J"; 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 m17-20020a1709066d1100b00a3fbd91ee0asi696201ejr.53.2024.02.23.06.34.33; Fri, 23 Feb 2024 06:34:33 -0800 (PST) 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="XH+iNO/J"; 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 619D268C5E6; Fri, 23 Feb 2024 16:31:58 +0200 (EET) 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 D731E68C67B for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=XH+iNO/J; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id C16164D48 for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id Xx2vOKgcXkec for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=8NSdbSecEDFo1db0XMw0pe5IL1N0PiNL4xz/vylmdXM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=XH+iNO/J8zO/4JTi1FpCHe43FKMu48JxqEuoyjdmbMI3QAfYOehLBX6nNtBGIVTx/ OmdMVbHAQOdStO5BBbU4ADd2UJDJIjkZA/xWCu8tUeKGsWG5hNNUsV+NMVdV2hKEBF nOR9fA1im+RQkE3lABeQw7MdgtStPzjYbxKAPMf35ppGZRR+4Hlnic0hbnLWCrbGmv 7fZewhMK4uLAmEwdxmnMwAhUn/IEf03yX/mOZ6RRvqD1iyJrAGCoVDJNH9+RDNSBS2 9lvtLQHqL4+zkJmu+u/mGOY7ziVv9OL51WRp5b2gR3fHJDuCzeXLv4vLMBRM8SZyuB bjRVQ5CdRXsNw== 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 96F2A4D49 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 98D193A1E00 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:39 +0100 Message-ID: <20240223143115.16521-18-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 17/38] avcodec: add internal side data wrappers 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: bfOtnWCunFTD From: Niklas Haas The signature of ff_frame_new_side_data got more complicated due to a need to distinguish between "failed allocating side data" and "side data was already present". We could do something similar to ff_frame_new_side_data_from_buf, but most callers ignore the OOM condition on this function, which is merely re-allocating the side data array. So preserve the return signature to make it slightly less of a pain to use. Signed-off-by: Anton Khirnov --- libavcodec/decode.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/decode.h | 20 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 5524e229c2..10946f208a 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1857,6 +1857,53 @@ int ff_decode_preinit(AVCodecContext *avctx) return 0; } +/** + * Check side data preference and clear existing side data from frame + * if needed. + * + * @retval 0 side data of this type can be added to frame + * @retval 1 side data of this type should not be added to frame + */ +static int side_data_pref(const AVCodecContext *avctx, AVFrame *frame, + enum AVFrameSideDataType type) +{ + DecodeContext *dc = decode_ctx(avctx->internal); + + // Note: could be skipped for `type` without corresponding packet sd + if (av_frame_get_side_data(frame, type)) { + if (dc->side_data_pref_mask & (1ULL << type)) + return 1; + av_frame_remove_side_data(frame, type); + } + + return 0; +} + + +int ff_frame_new_side_data(const AVCodecContext *avctx, AVFrame *frame, + enum AVFrameSideDataType type, size_t size, + AVFrameSideData **sd) +{ + if (side_data_pref(avctx, frame, type)) { + *sd = NULL; + return 0; + } + + *sd = av_frame_new_side_data(frame, type, size); + return *sd ? 0 : AVERROR(ENOMEM); +} + +AVFrameSideData *ff_frame_new_side_data_from_buf(const AVCodecContext *avctx, + AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf) +{ + if (side_data_pref(avctx, frame, type)) + return NULL; + + return av_frame_new_side_data_from_buf(frame, type, buf); +} + int ff_copy_palette(void *dst, const AVPacket *src, void *logctx) { size_t size; diff --git a/libavcodec/decode.h b/libavcodec/decode.h index daf1a67444..a131b9940a 100644 --- a/libavcodec/decode.h +++ b/libavcodec/decode.h @@ -155,4 +155,24 @@ int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_pr const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx, enum AVPacketSideDataType type); +/** + * Wrapper around av_frame_new_side_data, which rejects side data overridden by + * the demuxer. Returns 0 on success, and a negative error code otherwise. + * If successful, *sd may either be a pointer to the new side data, or NULL + * in case the side data was already present. + */ +int ff_frame_new_side_data(const AVCodecContext *avctx, AVFrame *frame, + enum AVFrameSideDataType type, size_t size, + AVFrameSideData **sd); + +/** + * Similar to `ff_frame_new_side_data`, but using an existing buffer ref. + * On success, returns the newly added side data, and passes ownership + * of `buf` to the frame. + */ +AVFrameSideData *ff_frame_new_side_data_from_buf(const AVCodecContext *avctx, + AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf); + #endif /* AVCODEC_DECODE_H */ From patchwork Fri Feb 23 13:58:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46473 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993588pze; Fri, 23 Feb 2024 06:34:08 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWhtAaIz/UhfeHmFaxPvOJzkBD1wr4Tm0hkK6gRUcWGo+qSFI3r2RkCu+lPNmGwQ43NSLa2EF78aAMt2+I8YFiH5fuAwjbIaw3oiQ== X-Google-Smtp-Source: AGHT+IG8BFFOOq9nfTn84vwiaIp2T903miyDSy03fMyzg1v7ZsMWRv0ePNx8hSjXlRQEvrWrkaMp X-Received: by 2002:aa7:ccd8:0:b0:565:1ee9:4f11 with SMTP id y24-20020aa7ccd8000000b005651ee94f11mr6129edt.15.1708698848601; Fri, 23 Feb 2024 06:34:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698848; cv=none; d=google.com; s=arc-20160816; b=k9m9MibXCu1gVScNEV7GSbSXBrZcH0tVVjeWh7jUXwIeE2s3MMuuQUBKbgYyTaBTru EEqFHpTSerNdAZZ++chtjzJka/LxOiUgnfQ8kozsXt0b67w+tftLWGjhetr4aYALj7rH htqHaUsH0qF9Q+QSNmxSWqw2S7KPFAUqQXqS4o6cOZTScT3PXf3NYSfdlaogtTxkFeOQ fhicIrI9KHrxQcVmXha8bj5qpCGdUHrIIcJDPztm4UVzHY0TAEsmLqVnsI1k7qDqKf73 FpUrkrRjF9pxpA4gPf0ImUO40epchR7gU52a7S3JdYYkzBdt1XzXA2YWup8tfJrOpRbv IA4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=htkBzh6O7tFsR3vCjliPFD6mPSN/i27GtT9KNRoGdj0=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=vfvOTy8OGfL901DX+NWiytbFqpabU6KF8i4TO4oGfuNnVXpAEtUzJuTTi902VVs0eX 8A5e1mH1RS+Bdyb4PW5/kL3G2DldeMsN9zg2dXSvCQIyq9oalxjpWtFBx9TyAVAK6M6H I6tabjYKy4IA5OszkIEHS9UAqi6OgwDwv0XGQ3YE2S3OCT+WXuctnbgZIwElDhgUjBYV AzIlW2QqhRn+yUkt4hkEDHEchPG8hCdnMkz/FS19ffr3OSQ96oa3hcJITplsi9zfmJNY g13/0eIruOjNQFzEkQaqQxH/XqEmqH9ZDrZdGddX2XuVP3hqkkxgFz052iYLcNgU4gwP tlSQ==; 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=AtmRpHuk; 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 w5-20020a056402128500b00563f3ee44c9si6081669edv.428.2024.02.23.06.34.08; Fri, 23 Feb 2024 06:34:08 -0800 (PST) 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=AtmRpHuk; 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 1D06E68C678; Fri, 23 Feb 2024 16:31:55 +0200 (EET) 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 C5E3B68C66E for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=AtmRpHuk; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 7B4E44D44 for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id HIbWr8cQUUiu for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=18TVeLg340D0tfVaUhYhKcaXJfvEt+fQAcrT4elNadU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=AtmRpHukpHNI8tTHM2XTUF/yOwH1W/KpzTuB4Q3rdNMd+G0YBRm1wUhpVHJm8Oapo loaBrBakDsLfBGkUU1mjWxRDujA/T1YUtZSU6h7V9RrK68y+4F6HrP47Q78oeURheA n3/4R8WW0HuCs0fSyTIjp5HgHvjA/soVKVavzG89vSxkkGSguNonCCoaPGi2uaGMl9 rg+Pl5e9sBbFTtqqiD+6OaP33JzWCh/x1cdslLFSh3tkNkKqTKYC1EUmSJEUtDaW71 C9rYlwbV4ADuf+zENyLb7laB5kvZc+PDgdd/+DPRlzQzOVmVFZxnEZ1/gbyOL0H9Qx fgr64CgeSZr5A== 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 982D24D4C for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id A474B3A1E2E for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:40 +0100 Message-ID: <20240223143115.16521-19-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 18/38] lavc: add content light/mastering display side data wrappers 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: 2Mgd1McjPOmy --- libavcodec/decode.c | 25 +++++++++++++++++++++++++ libavcodec/decode.h | 21 +++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 10946f208a..ad5525860c 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -35,6 +35,7 @@ #include "libavutil/hwcontext.h" #include "libavutil/imgutils.h" #include "libavutil/internal.h" +#include "libavutil/mastering_display_metadata.h" #include "avcodec.h" #include "avcodec_internal.h" @@ -1904,6 +1905,30 @@ AVFrameSideData *ff_frame_new_side_data_from_buf(const AVCodecContext *avctx, return av_frame_new_side_data_from_buf(frame, type, buf); } +int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame, + AVMasteringDisplayMetadata **mdm) +{ + if (side_data_pref(avctx, frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA)) { + *mdm = NULL; + return 0; + } + + *mdm = av_mastering_display_metadata_create_side_data(frame); + return *mdm ? 0 : AVERROR(ENOMEM); +} + +int ff_decode_content_light_new(const AVCodecContext *avctx, AVFrame *frame, + AVContentLightMetadata **clm) +{ + if (side_data_pref(avctx, frame, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL)) { + *clm = NULL; + return 0; + } + + *clm = av_content_light_metadata_create_side_data(frame); + return *clm ? 0 : AVERROR(ENOMEM); +} + int ff_copy_palette(void *dst, const AVPacket *src, void *logctx) { size_t size; diff --git a/libavcodec/decode.h b/libavcodec/decode.h index a131b9940a..b8df095532 100644 --- a/libavcodec/decode.h +++ b/libavcodec/decode.h @@ -175,4 +175,25 @@ AVFrameSideData *ff_frame_new_side_data_from_buf(const AVCodecContext *avctx, enum AVFrameSideDataType type, AVBufferRef *buf); +struct AVMasteringDisplayMetadata; +struct AVContentLightMetadata; + +/** + * Wrapper around av_mastering_display_metadata_create_side_data(), which + * rejects side data overridden by the demuxer. Returns 0 on success, and a + * negative error code otherwise. If successful, *mdm may either be a pointer to + * the new side data, or NULL in case the side data was already present. + */ +int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame, + struct AVMasteringDisplayMetadata **mdm); + +/** + * Wrapper around av_content_light_metadata_create_side_data(), which + * rejects side data overridden by the demuxer. Returns 0 on success, and a + * negative error code otherwise. If successful, *clm may either be a pointer to + * the new side data, or NULL in case the side data was already present. + */ +int ff_decode_content_light_new(const AVCodecContext *avctx, AVFrame *frame, + struct AVContentLightMetadata **clm); + #endif /* AVCODEC_DECODE_H */ From patchwork Fri Feb 23 13:58:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46488 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994824pze; Fri, 23 Feb 2024 06:36:13 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWUgJJIUL8hhyDrC9JFpl9Y/AjETEcnfzBiSupkCbEPfJ3wQHb+4UnJUbDn8B/AOyZhOfvuNJWFnN0t/SKqEp2x2ZvSROzMNNxhbg== X-Google-Smtp-Source: AGHT+IHQhXXPdzl9tgLP1G0FqUrKWRPaDzFqcQkTNputNjGh55UnM1sUm87lsJ9dAXZyS+fSxR2D X-Received: by 2002:a17:906:5648:b0:a3e:6862:dc81 with SMTP id v8-20020a170906564800b00a3e6862dc81mr1443933ejr.64.1708698973232; Fri, 23 Feb 2024 06:36:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698973; cv=none; d=google.com; s=arc-20160816; b=T5sjmpPgBncBZ6Dz/2C9cBSBGW9MoV+Q/1N399R8l9afgj+Nc+8Gwj1aVTGQVDD1YA XRxQzxVViZqldfmWIb7UlaAjL9IBegfZsx8nYsGe8uVTfHiRNcCdPx9DrFV5tH9y+EYU 5pzj5b6M35bryBRS1OuY3UwJJ31H9XKSklg9uuBy1dt2CQoJAkBCU5EogoxEonse5dad HSzhjfAPpBx7BhB+HXic4LGe25XpjrQ3KMLHbmc6Sqhbk5zfTKt9D9wWsVzHRGqY9Sxd cAWebxJoBsNuWQmKDQqsNq8WDWPqW/nczDmvMbQNYBbMq/A9vYqZCTilz1Ex4exu8jt7 Ms4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=x4LnVxls/JPSlpcZcX1whWv8bh0PlqChhS0YNSpuSSo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=JFQQuZXtlCmXIrtrdGbUm+MJPrKwOLGMbwAkKcIF6fMdjtvtOW1nN+A74rbXuJGK75 wh0Y6bLJ1svVaJjtv+ReliJT6DFsqJbaYuZsJomFClwRdzPk0AsCihWWl/XGufhN3I/M W03m1UEW/ln7MREPGYT9wkZBpdXJl6CAylREk4eZbjMZE6uGKkLcPrZ6KZBfDBe2BGPw SZQrj/SFne3w7Q8044CvJc7phvYTIP4qUtVz7GxfPmlnlDg4UTk62RY9XYfwp+AO0/d3 0f3Lr5oe/hXqmk04fl74r41yy0nAu+inLyzESc2DdKBBZSX1GfEKaWq0USce/Q3hMK7g QGOQ==; 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=cwuYm134; 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 hq19-20020a1709073f1300b00a3ebe808ffasi4546813ejc.190.2024.02.23.06.36.12; Fri, 23 Feb 2024 06:36:13 -0800 (PST) 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=cwuYm134; 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 4E26368CC28; Fri, 23 Feb 2024 16:32:11 +0200 (EET) 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 5827068C6F8 for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=cwuYm134; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 3CD644CFF for ; Fri, 23 Feb 2024 15:31:36 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id nio9K-7oV10s for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698689; bh=Eg4B6bdVatl0Sp8oIof69wnaskdRXoC1ty7PyyTqZag=; h=From:To:Subject:Date:In-Reply-To:References:From; b=cwuYm134Gez+afNvRLVMiMfjzDhyUPcfrbIT9te+MVu6hpK+Wq/UnePCN1au3YZjx p00Q3y5tdJD8aI5xBiD+hrMfGsrroEJ9u5rDfJNZ0uyWz803oCZwEcwFm6MYw8WcuJ 7Gkh0ujJ2pnFVSwJGl7zOQzqAvgQczuSB2FvIkiPhMGFE3j3o/RmFEc5Nldi9AKhHA zs25lnEJ0NrliagoYJ6vfDF6R+bU/vtsVUbuFsPqOiCGRwKTY+DJA6i/AZuMxWGhO3 h32Q3Ii7ecV1veuRQgkUdjO0hST5asAKZ+IllXJ+47f3CXzhE0fededEQGd4G0aWz8 jp6kYTQuX7npw== 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 CC9A24D54 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id B04BC3A1E81 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:41 +0100 Message-ID: <20240223143115.16521-20-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 19/38] avcodec/av1dec: respect side data preference 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: xMqTEnVoSs21 From: Niklas Haas --- libavcodec/av1dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 7debc4deda..4fcfed3c7b 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -946,7 +946,7 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame, if (!ret) break; - if (!av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_A53_CC, buf)) + if (!ff_frame_new_side_data_from_buf(avctx, frame, AV_FRAME_DATA_A53_CC, buf)) av_buffer_unref(&buf); avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; From patchwork Fri Feb 23 13:58: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: 46484 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994512pze; Fri, 23 Feb 2024 06:35:39 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUzZKOG/SvdmGzkPM6C6T1tZw7k4yTt4dk8xhj2DLVVmawiQPSxSUzSZw6sysS/wjBgjmsy+9JPK8wifuQSQYCVnQHSAXS5QrwlBw== X-Google-Smtp-Source: AGHT+IFvZr+o+CGsrwSLPzRW0iSdsia9bGHlKegUhR8EooOXHWZSslJq81K7JCUPsiMJBJniRcnr X-Received: by 2002:a17:906:aec7:b0:a3f:1328:90b0 with SMTP id me7-20020a170906aec700b00a3f132890b0mr1364447ejb.71.1708698939410; Fri, 23 Feb 2024 06:35:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698939; cv=none; d=google.com; s=arc-20160816; b=W5DezG/dkTI7+wU+dWSS+wCq7oGD3kbTwoJtrv7HMUD3mk5LoaDlHYos5rYeMrC1cn Tj0LbGeYrELwSaW2PBNXN8jKgiKtaPY3/sdWbJN1Ql0+m6vcaZcYREpZoxbCUPQRwDMz O6g9DTkeFOWugRJ0aI213MtlDGEAKLXAIL7xjKAy1wxDavkK27NLQRy8A9MatSw1TAOF 0DDs2YCOxw4wds+JBeQq/VHCxGaCkLeLVe9vK0OUprRYPbtUxM6/hrSTc07FSybRhYHw 6cpxAN+lwZrjYIqkR6z6EhImmzrZvDRSmkdl6iVo/ATz2FBScDuJv6jpLHG4Ht0jQ0W8 LyXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Kuf0GhxFTAF0PlC1LIxtm8pmbFTfquPvaklsCVYcdLY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=zLkdY2s5c0BZ7sBCk+/eGNcbznxpxYRKSD1DUHa9w47CbPpF4BwJdGu6PNXZWoVOSK 1TmXr00Dr5jwEaVeeNs8YXsFD2R+HZC5FgKWomrk3yKrgh+oygtw0XpnWkugBvKYtu05 +EsySg51CU21Rs7VamrGfq/u6dVXBXHN9miHEYs+sgwCas9+VbFivJqqIrPxSn9QzXdr yrL9HzBStNdDzitrKG19AAwyWqzJmYCoBK4+z1ZFJLo+RjGvby21+zDjGopKOvUtD+lT W+vp4R23IKBYex/rRdLzjMExZA4aWBx4aC7SaT5mZnht2AZX5DHue5dFNkvVRSI2EHiG mnZQ==; 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="qDK/29SK"; 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 p9-20020a1709060dc900b00a3fa6c624absi942321eji.866.2024.02.23.06.35.39; Fri, 23 Feb 2024 06:35:39 -0800 (PST) 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="qDK/29SK"; 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 AA4E968CBBD; Fri, 23 Feb 2024 16:32:06 +0200 (EET) 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 303FE68C6D5 for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=qDK/29SK; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id BD5524D51 for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id xj96kiUu7nyr for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=Mki37ip43QbhOnzR6Ayjcq71Ubtal3JWnyRqr6P/RLY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=qDK/29SKY7bzeTIyFfpUTcofhBvyWbD083F29yqh1UTjN92yD1IrJ53fFD84WYiqe qOloo2mv7e2kvTeUxnepemQ3Ifsy5OcgC2/c/Z/hWtLnx3l5WqTPZ16NNZMhyap/nC vaZye4En9P1pUlKNF75ydzMLfnqOCmcmv9poxhKUMoKENIcBnbBBYfoK0qSMFEV7JJ HsruAId5dC4WXBAyWF1I0STCHvzyi4PJmP3Lyp1T2hoFKGhWQa0htOdYpH3aVXifQp hP1IjSqzS6/ZQAat6TfVTRqCbC4WcN9jTG3xVw2nJrRVnEllhqdRCMfX9lh6Zu0Z4E fSfU+4wgtoQEg== 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 C2A4B4D4D for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id BBEE23A1EC8 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:42 +0100 Message-ID: <20240223143115.16521-21-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 20/38] avcodec/cri: respect side data preference 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: WdK9hHsRBRHm From: Niklas Haas This function was already ignoring OOM errors. --- libavcodec/cri.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/cri.c b/libavcodec/cri.c index c4eb468610..990e52ac99 100644 --- a/libavcodec/cri.c +++ b/libavcodec/cri.c @@ -398,8 +398,8 @@ skip: } if (hflip || vflip) { - rotation = av_frame_new_side_data(p, AV_FRAME_DATA_DISPLAYMATRIX, - sizeof(int32_t) * 9); + ff_frame_new_side_data(avctx, p, AV_FRAME_DATA_DISPLAYMATRIX, + sizeof(int32_t) * 9, &rotation); if (rotation) { av_display_rotation_set((int32_t *)rotation->data, 0.f); av_display_matrix_flip((int32_t *)rotation->data, hflip, vflip); From patchwork Fri Feb 23 13:58:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46477 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993887pze; Fri, 23 Feb 2024 06:34:41 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVj77g9k/zTILZ7xXjLdnwP+FP/i92y5O/P8NhlD1EASMBEoTxggsebTH1/DqqbXc9QyEz0C+tebCvicEUCV3ipQOoz6GhSGZFg+Q== X-Google-Smtp-Source: AGHT+IF1q86VjJcq9p4HV7PMIal6tp8d55BvYqN/0GCRpqkq/KFtdPv24eR1I7QBVQa4duRIdi4i X-Received: by 2002:a17:906:2c53:b0:a3e:ffd9:281e with SMTP id f19-20020a1709062c5300b00a3effd9281emr1252728ejh.77.1708698881471; Fri, 23 Feb 2024 06:34:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698881; cv=none; d=google.com; s=arc-20160816; b=RGuzSaEdGRYeLHu2ZRAjWX5o7e+xflVOQ+/YrkNY6L1oAb6TSs4wKYOtO/ONRwU8c/ 4IdKPP6V9C70lYsAIc4qNq38FQ/+Kg4LOaIxo879Ptf/S0ZfWfQfKjoEyXNvlPUDmSC+ 3eOjr21OcogQjXomeEOsAKEubEbjZK8+zKSOzJXZ7N03WNHGchMKym45aXjKZfWjti94 u9/cxtbbSCcD/1BIpz9NmOJ3u8RnD8WTzTfCGm5s1PBxDE6J5p9Xh29gWJUz2tBWsNOS PSuUsYNw8jasJBlFAWQWPmAOhoXdVvAGbt2liRxYHNDz01rhDZAMdjunmYzLUfjp29KX vshw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=DJkWTWASdC/6Nn3G7Kp/ArWD39eKb+lKp4aJQqPS1UY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=a5+QVExFhi4Te7IFlSPB2Apw8wy+YuW2HwE9rOkqhIt3ZElzKmF6jgRm0TF6tVkVns kz8ckIJkfQCpOM+mC0L1JICi7MHJ0pqS77c3S6ExT+wn9/bDdEwtUfLfpklLZdG0N6ZE GRXlzFVQqaGj7zPNrQBZfTCC5d/9612h/GcueZY8kqidE9IACenMwjaH0CQJ9kBHG1Ic X6nwxtyiFRsTGlGTLPlCzcqp5V1Vpf3fFziQyfI4FwKoCUJv17aXCwQKL6tKKtctEBMP Ato54aasalt5t/UOs+N5IaTgf3RPRHGYSZCie4mS4EYivJPuxRo2jt5Dx0evDCcHHC5v 31Bw==; 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=MHdpkY1u; 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 gs18-20020a1709072d1200b00a3e819b857csi5304530ejc.82.2024.02.23.06.34.41; Fri, 23 Feb 2024 06:34:41 -0800 (PST) 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=MHdpkY1u; 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 6DDA368CAA2; Fri, 23 Feb 2024 16:31:59 +0200 (EET) 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 E155E68C692 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=MHdpkY1u; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id CAE994CFF for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 2ds4e2eCRTdP for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=tXUY0imMRuTMiZoxEWnV+v7AfMMGX/qRpB49BDs6gvg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=MHdpkY1u/Q0n82o7/dBdj8mi2hAA7IOPV2CVXrfy+iDjRGDqgP6rAUMwwmVuBIE9K qLcbKo6yfS/Lr6WAxS4AJ8NmTLO4I4hBRHqrDgiejFPSa4OzApZqDJC5aZWMnO0wXQ fZxniU7Pi3WhxdUV8vlyuohW+EuX4Pv5sHHWyGuxHgOWofHEiBWSTmJuugP9IqTbW3 36cnyOXbrauHKGaSliSc7NFXJzP/pK0E1FeoVXuw5bX/MrK2ko4eU0a+o5OyQyugyj 6SU/EKRUf8eK676frqZGjuBy+2FfOro7me9Z56BMNjzNYi7Rq4RncAIJJmby52jFP7 u//ahdoTqaUDw== 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 AF4EE4D6C for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id C7EE13A1EDF for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:43 +0100 Message-ID: <20240223143115.16521-22-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 21/38] avcodec/h264_slice: respect side data preference 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: lAwgnqktugxm From: Niklas Haas If the time code side data is overridden by the packet level, we also make sure not to update `out->metadata` to a mismatched timecode. --- libavcodec/h264_slice.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 8464a0b34c..f30ff33188 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1257,26 +1257,27 @@ static int h264_export_frame_props(H264Context *h) if (h->sei.picture_timing.timecode_cnt > 0) { uint32_t *tc_sd; char tcbuf[AV_TIMECODE_STR_SIZE]; + AVFrameSideData *tcside; + ret = ff_frame_new_side_data(h->avctx, out, AV_FRAME_DATA_S12M_TIMECODE, + sizeof(uint32_t)*4, &tcside); + if (ret < 0) + return ret; - AVFrameSideData *tcside = av_frame_new_side_data(out, - AV_FRAME_DATA_S12M_TIMECODE, - sizeof(uint32_t)*4); - if (!tcside) - return AVERROR(ENOMEM); + if (tcside) { + tc_sd = (uint32_t*)tcside->data; + tc_sd[0] = h->sei.picture_timing.timecode_cnt; - tc_sd = (uint32_t*)tcside->data; - tc_sd[0] = h->sei.picture_timing.timecode_cnt; + for (int i = 0; i < tc_sd[0]; i++) { + int drop = h->sei.picture_timing.timecode[i].dropframe; + int hh = h->sei.picture_timing.timecode[i].hours; + int mm = h->sei.picture_timing.timecode[i].minutes; + int ss = h->sei.picture_timing.timecode[i].seconds; + int ff = h->sei.picture_timing.timecode[i].frame; - for (int i = 0; i < tc_sd[0]; i++) { - int drop = h->sei.picture_timing.timecode[i].dropframe; - int hh = h->sei.picture_timing.timecode[i].hours; - int mm = h->sei.picture_timing.timecode[i].minutes; - int ss = h->sei.picture_timing.timecode[i].seconds; - int ff = h->sei.picture_timing.timecode[i].frame; - - tc_sd[i + 1] = av_timecode_get_smpte(h->avctx->framerate, drop, hh, mm, ss, ff); - av_timecode_make_smpte_tc_string2(tcbuf, h->avctx->framerate, tc_sd[i + 1], 0, 0); - av_dict_set(&out->metadata, "timecode", tcbuf, 0); + tc_sd[i + 1] = av_timecode_get_smpte(h->avctx->framerate, drop, hh, mm, ss, ff); + av_timecode_make_smpte_tc_string2(tcbuf, h->avctx->framerate, tc_sd[i + 1], 0, 0); + av_dict_set(&out->metadata, "timecode", tcbuf, 0); + } } h->sei.picture_timing.timecode_cnt = 0; } From patchwork Fri Feb 23 13:58:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46479 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994041pze; Fri, 23 Feb 2024 06:34:57 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVMXTnOWA5+gGLCZxlybJ07994Z5C3tqNX2kE+E7BpTwNKOd8W0rIG24cGGM70v0YC7J4xiEgPxXc2AQsKy+QWd2vR3uwfUafKRjQ== X-Google-Smtp-Source: AGHT+IGFZYT/Sn0/A6jh9my56pJ6U7X/wNFtkVdGqknR3561qZWZJ0lbmk5sqN+FY0OXq2Ilh/kk X-Received: by 2002:a17:906:3792:b0:a3e:4576:b25a with SMTP id n18-20020a170906379200b00a3e4576b25amr1375689ejc.18.1708698897542; Fri, 23 Feb 2024 06:34:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698897; cv=none; d=google.com; s=arc-20160816; b=yB32MqqjmkFf/9WBPdXuytQPL2yRhAr9zpkLzpG9znbPiE9wHikgPMfSRMKJZx0NsF bV6ga9bS0HCx6vwZ5L2LVEf4Dz45iiDbC3rXZPtzD7anhGbwU34GG5T7duJzhOWimoNj DaoNN8VUAmAOpED7WdOZfEM9r8IuBE+OwHl07jBO/3J8bZAB6qPQjskmp5wM/CHa9z+J ZKXUi2W6lUS4BSa/Ti1hbRdqrbzjdHN8QBbW5qU6ZUB1GoxxY2p0WXokhmbVDUTLx8uw stnGS5trBEewJXuTygf3i4tfhQfWqgJnIPB8FmJDqPl62WdV4q3YHS87Joq88YqHCtQo jY0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=mfSHFVB8/UKEy2MaRLq/5gjfTM6fV6gktoalsVC4GOY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=J4X0IU74xMfTHwld+x0wnKx61MtC7ltmjMGzwk2+WHbdwPJEylG+FBK0jFspBLG/Qa 7PmQkuHyQLk8vEYzbsQSK9Dk57pJRIOlzcV8Ll2oOWTRUMildAKgt1ruCabMNoTBJsjx 9ZCCxsQ5jLfOZs7jpTdVtM6304Wi4RooWxKm3VYnL84qufjRGbzdNdiEZ/OIoi4RcuR2 U7WA5ZSauE+UdPk3vl4zjVR9vOzmglVBUUR1tee0s8usBsEEj/ItgDQ/OzufkMNk4Qc2 vbqQap5K6OEpTYhxPNdkM4I+Jdz7hKoW6Sh82hlTnKLsoR42DbwXF2WR1F6TFkP7cQTr mxmw==; 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=ntOQc4dl; 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 i16-20020a1709061cd000b00a3e3fab918asi5501899ejh.627.2024.02.23.06.34.57; Fri, 23 Feb 2024 06:34:57 -0800 (PST) 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=ntOQc4dl; 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 2157A68C6CE; Fri, 23 Feb 2024 16:32:01 +0200 (EET) 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 EDA6168C462 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=ntOQc4dl; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 716154D5C for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id QkHzsTGygm95 for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=ltKhHgozOBjjkZAwzHKZ0Mbdjrklz5jYDpc13svzutE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ntOQc4dlX+JcB7run2sEE9p4hdKj1j2jzlwMr3wYFX1pU8YYmsvfhIn6qsibQSGtp NPC1QtjkH4v399kUV3VY7x5S+vYWZmDqPNFaPopcjLOXHeVLEC/oSTKjtk0m2BWtUY prdwHFttAAyi4VBUd5gGjP3+YVZLWzQ2KqY67RB2CopvQpavWSO3EqOPXd41oijXwg k8Ij+aGzcBOaEmmHui7G/m+5DFuFdBU44wJ8scl8W8YTV33yidPqYZc0oixRXt2VSI p/hynN3xWqqIBTwC42+dQfNNyv6oPvSbd6aHT7bZuS3SSOGapFrHpIlYOfvX5T2W9p 4Bqhf3xS7wM1Q== 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 C36B84D51 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id D36E83A1F08 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:44 +0100 Message-ID: <20240223143115.16521-23-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 22/38] lavc/hevcdec: pass an actual codec context to ff_h2645_sei_to_frame() 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: HjLnddIWC0k0 Needed by following commit. --- libavcodec/hevcdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index b5311ae510..17c6a9212f 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2778,7 +2778,7 @@ static int set_side_data(HEVCContext *s) s->sei.common.content_light.present--; } - ret = ff_h2645_sei_to_frame(out, &s->sei.common, AV_CODEC_ID_HEVC, NULL, + ret = ff_h2645_sei_to_frame(out, &s->sei.common, AV_CODEC_ID_HEVC, s->avctx, &s->ps.sps->vui.common, s->ps.sps->bit_depth, s->ps.sps->bit_depth_chroma, s->ref->poc /* no poc_offset in HEVC */); From patchwork Fri Feb 23 13:58:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46459 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993321pze; Fri, 23 Feb 2024 06:33:42 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWBamoPcfoz2YaEhryoN0rtQG/JMJlkC6N6+THnRwF+K/kkrUhG432+XyeIZNpvcXUMf6mTay9F6c4uhlwEEAInOMUEd1LJBzyjjA== X-Google-Smtp-Source: AGHT+IHtGcrXb7IwnbSCbNd725UvmRlt8DiuuM9QNlFA6bvpLp/8tg+pv9F/pdnJgUZJevgXqMhh X-Received: by 2002:a17:906:951:b0:a3e:b7b5:a64e with SMTP id j17-20020a170906095100b00a3eb7b5a64emr1394054ejd.20.1708698822043; Fri, 23 Feb 2024 06:33:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698822; cv=none; d=google.com; s=arc-20160816; b=KRKo2YeRb/DVSDpoolGqMSAbQCEXsTC/WMCsaV8FsToV6TbC0VhoRvJD3GdASVW6x0 bCiI2LsOg0YY1Hzdj8HapVLH6lba0PJKxDF2ZSdoWk0U1XnShSdk/HHwKuLLX7rDm9f9 9bGQ09Xum7H29PMYoEb+adPVP7n8mDinMlPOskrbdWA0mEadcCPNdwlNHhp1dUWxV08u ub+GlBU08GaEejIlC35icvg61GWfGBmOub6e2YtU4oWH0R9m+RAg8oXaeNOHaIkcukP+ E/OLPWSjFBhwYezcL8n1tiyNtx5ogZ7qhnRiPEVt+HyID9n5a8Gby4lQuyHICZLRogho +B9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=8kL+/qOLIBkN/F5K4Rt5MMvTNbGHE3runTpJqlcSQCg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=qF521+Ui1QZ4HZeDcxZUSABe0FcSAtfi6gqSqrSN5L7dTxeZNH2o9a2AV3QIuc4BAd 6p1rUG9J+MsR6XIJyJWb5RpW9b7+QE6kaVRvAEhFa/C7ltAwY91zv/5zknWUS1bsfaSS LIQ4JJp/a4Yr7WlnhsZhQ26E+NFY1fc348JQFIOlQ6326LUKba9WJet8VgfwpjiJH1J3 R0UgXK9RHKJk5+kwPJjNV/3C16x21yLoetMl4OczMZvW3gvjLVvf0OqQX1a5Uog63xlp BGz7iH5KaSbNkUoPKDXIDj2jfZJLTwVR5r6hfJ6dUB5QsUvsPpgw5DwY2w2CsszO7qV5 jIlQ==; 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=g9MMGx+a; 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 cb26-20020a170906a45a00b00a3e62703445si5299256ejb.571.2024.02.23.06.33.41; Fri, 23 Feb 2024 06:33:42 -0800 (PST) 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=g9MMGx+a; 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 EEC8168C9A5; Fri, 23 Feb 2024 16:31:51 +0200 (EET) 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 AA28A68C651 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=g9MMGx+a; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 268454D52 for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id gzaTnfCJQ5sF for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=rVhOOvCjAP1Q3zlhcqZDHq/8ckP60jXJVIst9nJcC9k=; h=From:To:Subject:Date:In-Reply-To:References:From; b=g9MMGx+a0D0Ys0xJinZOOe0i1UFul5kY6wK0KMx4dhEaNJ2W6Ms2BSIu0hilgj2XW TIJvXHFVtWWrbIOBDhTN1RPbrfr6Esim64S4dejAtcQC6oOoudSzEZbiNaRIA0j6rA 7oA82PHS2SOmMmbh0y9kyWtFxyO3YA5nRXWs9tB5fytUbvu4TCEheRDU/O+BGJxq7i Hlvm4DWXGpnHv+G84NRJrYjQdW/WH6aFklBxNyoBAvlCNyiypd4hxV34kT4sY92nSx gLLAFWUK0cvXdd8XKdnKdo0McsTAMnhahewF3feHPoXWXD+BQa29MyIlswelttKPAM ncsDN8QXYkFeQ== 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 C2C154D4E for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id DF41C3A2105 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:45 +0100 Message-ID: <20240223143115.16521-24-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 23/38] avcodec/hevcdec: respect side data preference 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: J42h7zyEp/NT From: Niklas Haas If the time code side data is overridden by the packet level, we also make sure not to update `out->metadata` to a mismatched timecode. For HDR side data, we unfortunately need to omit a return check because the new function does not distinguish between OOM and overridden side data. --- libavcodec/hevcdec.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 17c6a9212f..0cb2577b39 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2788,24 +2788,27 @@ static int set_side_data(HEVCContext *s) if (s->sei.timecode.present) { uint32_t *tc_sd; char tcbuf[AV_TIMECODE_STR_SIZE]; - AVFrameSideData *tcside = av_frame_new_side_data(out, AV_FRAME_DATA_S12M_TIMECODE, - sizeof(uint32_t) * 4); - if (!tcside) - return AVERROR(ENOMEM); + AVFrameSideData *tcside; + ret = ff_frame_new_side_data(s->avctx, out, AV_FRAME_DATA_S12M_TIMECODE, + sizeof(uint32_t) * 4, &tcside); + if (ret < 0) + return ret; - tc_sd = (uint32_t*)tcside->data; - tc_sd[0] = s->sei.timecode.num_clock_ts; + if (tcside) { + tc_sd = (uint32_t*)tcside->data; + tc_sd[0] = s->sei.timecode.num_clock_ts; - for (int i = 0; i < tc_sd[0]; i++) { - int drop = s->sei.timecode.cnt_dropped_flag[i]; - int hh = s->sei.timecode.hours_value[i]; - int mm = s->sei.timecode.minutes_value[i]; - int ss = s->sei.timecode.seconds_value[i]; - int ff = s->sei.timecode.n_frames[i]; + for (int i = 0; i < tc_sd[0]; i++) { + int drop = s->sei.timecode.cnt_dropped_flag[i]; + int hh = s->sei.timecode.hours_value[i]; + int mm = s->sei.timecode.minutes_value[i]; + int ss = s->sei.timecode.seconds_value[i]; + int ff = s->sei.timecode.n_frames[i]; - tc_sd[i + 1] = av_timecode_get_smpte(s->avctx->framerate, drop, hh, mm, ss, ff); - av_timecode_make_smpte_tc_string2(tcbuf, s->avctx->framerate, tc_sd[i + 1], 0, 0); - av_dict_set(&out->metadata, "timecode", tcbuf, 0); + tc_sd[i + 1] = av_timecode_get_smpte(s->avctx->framerate, drop, hh, mm, ss, ff); + av_timecode_make_smpte_tc_string2(tcbuf, s->avctx->framerate, tc_sd[i + 1], 0, 0); + av_dict_set(&out->metadata, "timecode", tcbuf, 0); + } } s->sei.timecode.num_clock_ts = 0; @@ -2816,10 +2819,8 @@ static int set_side_data(HEVCContext *s) if (!info_ref) return AVERROR(ENOMEM); - if (!av_frame_new_side_data_from_buf(out, AV_FRAME_DATA_DYNAMIC_HDR_PLUS, info_ref)) { + if (!ff_frame_new_side_data_from_buf(s->avctx, out, AV_FRAME_DATA_DYNAMIC_HDR_PLUS, info_ref)) av_buffer_unref(&info_ref); - return AVERROR(ENOMEM); - } } if (s->rpu_buf) { From patchwork Fri Feb 23 13:58:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46474 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993657pze; Fri, 23 Feb 2024 06:34:17 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCV9T5KD6E1EdVghWe9bE1ytKQDKKa67TeZc56S2/JG7lcRXkDsTOlAVu5NW7IXN5qqXBrO+hTrxbD9J2KvQk9NDlKnnfQ56H4+yGw== X-Google-Smtp-Source: AGHT+IGIl84Lf89/84F8B6fWiZuGfXKsMcZSQiW4xrDiNV5dmzJ8/lZypBejWyknloloCn4ZvRo2 X-Received: by 2002:aa7:cf19:0:b0:565:552a:6f8f with SMTP id a25-20020aa7cf19000000b00565552a6f8fmr17071edy.7.1708698856727; Fri, 23 Feb 2024 06:34:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698856; cv=none; d=google.com; s=arc-20160816; b=U0iv4sxHrz3yo2B6SSk5T9X+2eCurUzKTpI0Zpt85FLNfzb8gceOR88qZE0RtzVCpS nB5hQZ6bl1yMsDFqTIVRmjE6Dz4fQ0NyAMMda/Yle6BgT0NWnCPyuSYLOCGz2oomIqsx 6WZqlJOuE7fz5Kg8prNOtu0NuQaDOp5FRZa0w7Ze4G6A9S7BMGLr3q5cu6At7tyRBhmZ Y/Splm5gocgnM6NAhCDRguLHEjyMTnYWPgfRuQvSjEtCgJVHcQ3QqkDLOueWIJCRcvoA RShTcmaCtcvHgWtZF5fBnUVI7Y9pv8c2oZHABhCcxgBaYDMExleZZJ7SuXOhxFlyEDEI kF/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=NuZN8dON9lPo5cTFZeZsGjIMGaK4uJP8sF1jBWo95ZY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=KDpkdIs9Ohq0EPM6LGWWmSVHenpDqOsxcF8iNKC7orwbqyoS1XUAEm8cBKiJ24FzKF IWAE10AA1uCm9mJNeyi70KtqBYfJfC4eoen2Jagqneg7XkRzFEP1H42u8NsYyEN6O01b 5l5P+geNvSmCRzqJklikg18cqlnLk+kOtpnITYMdDWpKV2cJYUwQ4Ftl15BYtsPMMMlx NDUNU18cegovRL7Ok22OQrYhfL+iIx/wqMd8w0glYjrDnN/m0/leXkgKvz31IgHDjBgg ufo9RY3lAG6C70pVQ7hh8EyHnsMiu9lX4z39hr36cjOF2M1gYYdgvbKGjVM9JXX4BX/e yzwA==; 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=JxwxgWVN; 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 y2-20020a056402358200b00564f1974a0esi108012edc.137.2024.02.23.06.34.16; Fri, 23 Feb 2024 06:34:16 -0800 (PST) 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=JxwxgWVN; 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 3849C68CA4C; Fri, 23 Feb 2024 16:31:56 +0200 (EET) 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 CDA5A68C678 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=JxwxgWVN; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id D809F4D56 for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 8eNjxOkhSVvC for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=FFAKXREVXCglj8KQRSP6QOwI2Pk2FS1jIukyFGIv9zU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=JxwxgWVNc+9IRwgF7X5IM/62FkCCGsSaczFCjjMls5ShzdPxswdjiRjWUBfat2iti eWxpJ92F7s+9uzM2fJj+J/ByAOGRA7JgJCWfTDFobpumABmmkFWkUUlGgEHfNNj8QX kfCkecm1CKrfsSaa8pCtkVON6lABt+Nfia5opnqbYOsVFOjBJsuToPUS9rn8f3f5iW ZGj84ghwK5WxRJSPtgbCQgl1sKZA7HVpyMIavqvA90xXhnsHJba/XDQIng5A40n3Bv iXi1E0n5Sq0tuKa6oGpAMOU5SngWV6N3wYjXlq1Di5P6yqEfNOBXPqsQ+0h69CVX2l 6rioU+87hR+jQ== 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 DE81A4D59 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id EADCB3A21E7 for ; Fri, 23 Feb 2024 15:31:22 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:46 +0100 Message-ID: <20240223143115.16521-25-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 24/38] avcodec/libjxldec: respect side data preference 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: Qxz6cos2pZtt From: Niklas Haas Also fixes a memory leak where the side data was previously not properly cleaned up on OOM, although we now unfortunately don't distinguish between OOM and overriden side data. Signed-off-by: Anton Khirnov --- libavcodec/libjxldec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/libjxldec.c b/libavcodec/libjxldec.c index b830eee784..e1dda99b73 100644 --- a/libavcodec/libjxldec.c +++ b/libavcodec/libjxldec.c @@ -483,9 +483,9 @@ static int libjxl_receive_frame(AVCodecContext *avctx, AVFrame *frame) /* full image is one frame, even if animated */ av_log(avctx, AV_LOG_DEBUG, "FULL_IMAGE event emitted\n"); if (ctx->iccp) { - AVFrameSideData *sd = av_frame_new_side_data_from_buf(ctx->frame, AV_FRAME_DATA_ICC_PROFILE, ctx->iccp); + AVFrameSideData *sd = ff_frame_new_side_data_from_buf(avctx, ctx->frame, AV_FRAME_DATA_ICC_PROFILE, ctx->iccp); if (!sd) - return AVERROR(ENOMEM); + av_buffer_unref(&ctx->iccp); /* ownership is transfered, and it is not ref-ed */ ctx->iccp = NULL; } From patchwork Fri Feb 23 13:58:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46468 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993044pze; Fri, 23 Feb 2024 06:33:16 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCURoWvkhJ8BsCltQj94Q9S5PLv9SX7BJZ2na9FCG2FZ/xza5yBkww9MLjQp5slLi1jVbrG9L77jhgVJA/EqrT7tnrK7XQU9TSZ5ZA== X-Google-Smtp-Source: AGHT+IE6YbthZIT1f60kXRcysGVTjAFeGVFj/9xBQZH4KNT4LcqYkZz1HCrKhs0ly1SFWN3TxMHU X-Received: by 2002:a17:906:31ce:b0:a3f:1250:5c3e with SMTP id f14-20020a17090631ce00b00a3f12505c3emr14515ejf.0.1708698796051; Fri, 23 Feb 2024 06:33:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698796; cv=none; d=google.com; s=arc-20160816; b=LoEWmyplrjQpfPrFoFe568hRVThPrTYofFkpwUB4FVgXlpelKHN5ab4ZQm9Gmsuwvs 0VWW2gpMWAk3Z5sKE25an5JUX8Fmfe31hPZhSXVUWgj+IPqc3lJA8tVgC7Rd4plQT72m 6ThHscMoynMrFL1nLQVakRBAiahysvyOEuGawbQJAsKiAuGCvs2P83NpLq0PmptLcG1j eNsGKU8tmFtEs9a65QbmSA+YSxHogqcvHolXRVPAna7Wap6QY5lIFE3Tw7WTTp0o4xhT 9Mo0h0qoC2JHv9rk67MFAjau4ee1oTT+E0E2pzSX+16L4JZyvP64k6GI8MDFZ3wtSssc U9eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=4LWTrKWbBO0c3FWJUUHUs0svAAJs8z0Iv86UP5l9VQg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=e3Im8FNcspYTXqxzzjnRpoL/eOrngwwMKJAfoG0mlALy8CmH0DcufD0t2WcFuIeOCf I3PADFIvkhnZcuU0+ynnqvBNeFxCEj9qTq/pLjVh9uPN+w22fc+5OJq5ef0e1pSxAG2f t60s//EmrSEsSPLp3DGIkvn9GZEdyQ+C//YEQGyZaIaP7ZIKaKmpkxiDDjDmMT2+qCg5 vB3Zue1M3Xi8zvkH315ivkD1+qhEfE1czoHwNIxcWcB3vLn3CJqFPUFdewT5fVLdjWHM TQXvqapaJdaJkQoL4HIhxcbZB9cc6dW5Z011cjJgRlR1WHUAEoC4MOKXEI2t41k+DSze w/Mw==; 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=dHh9GyvU; 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 hz4-20020a1709072ce400b00a400e5b5af2si341891ejc.411.2024.02.23.06.33.15; Fri, 23 Feb 2024 06:33:16 -0800 (PST) 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=dHh9GyvU; 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 04DB568C7B8; Fri, 23 Feb 2024 16:31:49 +0200 (EET) 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 9DE3168C64C for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=dHh9GyvU; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id C78524D4C for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id nUfQx14TMowl for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698687; bh=HyUQ9eqXcXyhpKE3fDbV0tykYw98RvqEzxBihMQ1l2Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=dHh9GyvUsY+Ij5ScSHMp7GDP6yGF/rB2oxkeZGBWQl5i+8kYlKKoNb5ih2aXsMFJ/ cTNjvSxK0i0iRMpqiAlDwHZQsXrFyg9VkujdWsatV3jSoKMJJmNAL3nYRbScvGpPbE NcoblKk8AKXkY3vVAlYSt5HEp4KyB4RxEgV38+jYP28YxoVvizr5ZIlj3biJLWM3Jn 4/Fb2RtySUhwizXJ/FkQ+rMBOqhPtSdlkeQFkFEUngOB0AhpPcwAJI1y4E2dgLaaVa x6rIKrSIz+ITOmGvKxGlzLyC4p5PK9QF5kbbn5/+Ozel9dT++NW3d20dc4PxfgCgz7 otgpehus7+mvQ== 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 C631F4D52 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0280C3A21EC for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:47 +0100 Message-ID: <20240223143115.16521-26-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 25/38] avcodec/mjpegdec: respect side data preference 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: aelSGq0ypoBF From: Niklas Haas --- libavcodec/mjpegdec.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 81f724d230..43b36d0a8f 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -2840,16 +2840,18 @@ the_end: for (i = 0; i < s->iccnum; i++) total_size += s->iccentries[i].length; - sd = av_frame_new_side_data(frame, AV_FRAME_DATA_ICC_PROFILE, total_size); - if (!sd) { + ret = ff_frame_new_side_data(avctx, frame, AV_FRAME_DATA_ICC_PROFILE, total_size, &sd); + if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Could not allocate frame side data\n"); - return AVERROR(ENOMEM); + return ret; } - /* Reassemble the parts, which are now in-order. */ - for (i = 0; i < s->iccnum; i++) { - memcpy(sd->data + offset, s->iccentries[i].data, s->iccentries[i].length); - offset += s->iccentries[i].length; + if (sd) { + /* Reassemble the parts, which are now in-order. */ + for (i = 0; i < s->iccnum; i++) { + memcpy(sd->data + offset, s->iccentries[i].data, s->iccentries[i].length); + offset += s->iccentries[i].length; + } } } From patchwork Fri Feb 23 13:58:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46471 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993426pze; Fri, 23 Feb 2024 06:33:51 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXGzAV+yvxhIv2Lwq52/vQ4pd71eX0grigMcRX2lOrAZ54LofiJKJPWpDQ8GoRFdan+I5PSm3APZMhiLhA3Xm9WZ+8YBTo8gT3DSA== X-Google-Smtp-Source: AGHT+IHaFlD+PnKwk6DJcbyEu/ammWdanxPhYQ8mlLNZ2UQjfCiIl1b4mtp6sdXNsUBKQHeJkZXz X-Received: by 2002:a05:6402:1607:b0:565:7d4a:1d4c with SMTP id f7-20020a056402160700b005657d4a1d4cmr10545edv.9.1708698831228; Fri, 23 Feb 2024 06:33:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698831; cv=none; d=google.com; s=arc-20160816; b=OYOURwE+068lE0IQJIaw5DT9TqDRmARCiBQF8Bz0bggyNyzD5kLgWMIW42O3NdQ5Ik N3PWLFnp49fdfxzZUl8veqXjBXo6+iMSCvMevubdymnk8vVfMw9xWFeTHPWy6nZDvOkG F3kIggJo0G1mAASiDshjBTWHGmVkd9ucD1tABcEi6k46OzGGQvAf+57EBPNH/coAV9vB O4q7Yg1r5dhKM1Wq/tdVYEbWmPZY1QvPVFs7Dp9l9lsQZ7Ok0dSGBzwaGqXvy3laIWDX 88AaO0Z/1++T9uUjARpicxGg0TOM1YK8vtOHoLA5Mm/yrDBh0JJDeajfG0plhVQ7t3Yx gC8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=rnOf3HHW7ehlkv8QeYwBMm7zHh8PpF8xREZ11MFdtMI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=CC9M7cZy63hUYnwhHd4OEq6gl0LVc/8nUtM1k62cxgGxR73werZv/E0pf//BtB+z27 e2lDepcqKtAR8JrmaFIhl++BkveoemLVU/nxH6BSjJTHxodOYj54jfRPDDz3vLf7+zDu 6G/pijyesu+zWARQyG8Ntfc11Nx78ttLVvGuj/78qQ5O6y1Z8eSCCubGyt4E/LtYMu/R 1nge+qeBSmAP1uTBOXpDx+jfA2VMZERVi/ZT83BltNJcfFPb6OCti/zzbT4iWlyt2Sb4 YkR7Tx4PT0h9W2z0Y5bSvTBR0Prw3Y6UFQKYfUoEN+gZTnmitoQPzHT59M11PQniIZfP MJYA==; 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=PMHE9Svy; 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 c10-20020a05640227ca00b0056541227202si1286134ede.91.2024.02.23.06.33.50; Fri, 23 Feb 2024 06:33:51 -0800 (PST) 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=PMHE9Svy; 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 0441568C9D2; Fri, 23 Feb 2024 16:31:53 +0200 (EET) 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 BA14368C5EE for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=PMHE9Svy; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id C0FAF4D5D for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id VTWlcIAYWisQ for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=9VO4dvvSsqPAm5tuZpDXBf3r2jov6FfEInzAF55shc8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=PMHE9Svyc07zmTGZaL1MAECCjeQqVSbCAOStA15lmzTcf1zjjagriql5Uxx6yk4VR R7hjI20+TzDeI7DUZ5jxuN+b7fkW3LP7JRjg2uBpRh5zZ+52IxiK8Lwu26M8KXfbJz YsuluFjFcdJ2kgZdutDxMRGWYl8IYmYth2cjB37+pJm8P8mpUMD4SDxsfz81RuD0gk xlKcuT+znKGk5Zp2u1J5tseCBQwSUCgvx3iW2NpEVMVdzJc+UNKYmDgv01OJCnBz4L gpkGeSoMTTW8x6P9TT5c/1kDwrHb44PkHN2ZBUtO4HleHijFa13nx99Y50VoztC4Na mC9QT1lDTVr8w== 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 3654E4D3D for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0E2623A2257 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:48 +0100 Message-ID: <20240223143115.16521-27-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 26/38] avcodec/mpeg12dec: respect side data preference 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: 2quuxk2kVNeg From: Niklas Haas We only need to consider side data types that may possibly come from the packet. --- libavcodec/mpeg12dec.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index d07eed8744..96987f5a8e 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -1306,16 +1306,17 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) } } - pan_scan = av_frame_new_side_data(s->current_picture_ptr->f, - AV_FRAME_DATA_PANSCAN, - sizeof(s1->pan_scan)); - if (!pan_scan) - return AVERROR(ENOMEM); - memcpy(pan_scan->data, &s1->pan_scan, sizeof(s1->pan_scan)); + ret = ff_frame_new_side_data(s->avctx, s->current_picture_ptr->f, + AV_FRAME_DATA_PANSCAN, sizeof(s1->pan_scan), + &pan_scan); + if (ret < 0) + return ret; + if (pan_scan) + memcpy(pan_scan->data, &s1->pan_scan, sizeof(s1->pan_scan)); if (s1->a53_buf_ref) { - AVFrameSideData *sd = av_frame_new_side_data_from_buf( - s->current_picture_ptr->f, AV_FRAME_DATA_A53_CC, + AVFrameSideData *sd = ff_frame_new_side_data_from_buf( + s->avctx, s->current_picture_ptr->f, AV_FRAME_DATA_A53_CC, s1->a53_buf_ref); if (!sd) av_buffer_unref(&s1->a53_buf_ref); @@ -1332,13 +1333,13 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) } if (s1->has_afd) { - AVFrameSideData *sd = - av_frame_new_side_data(s->current_picture_ptr->f, - AV_FRAME_DATA_AFD, 1); - if (!sd) - return AVERROR(ENOMEM); - - *sd->data = s1->afd; + AVFrameSideData *sd; + ret = ff_frame_new_side_data(s->avctx, s->current_picture_ptr->f, + AV_FRAME_DATA_AFD, 1, &sd); + if (ret < 0) + return ret; + if (sd) + *sd->data = s1->afd; s1->has_afd = 0; } From patchwork Fri Feb 23 13:58:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46486 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994665pze; Fri, 23 Feb 2024 06:35:55 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUuLKO8ik8U1nU1agPyfNphfDZ4Rdsen3njsRevtl31fNgBb8Resuu0/Rf4zdp/4kjL/U9vThCZKrpM+rnCkxbAOhcb0jvNCL3gXg== X-Google-Smtp-Source: AGHT+IHXzciV5C0kS6TxyvNhL3cCNtmBEMKqywdsYbXdfmqxQhZp93fhYewTqBzoQXqivhAwEqX1 X-Received: by 2002:aa7:c502:0:b0:565:5ce1:280 with SMTP id o2-20020aa7c502000000b005655ce10280mr35300edq.3.1708698955456; Fri, 23 Feb 2024 06:35:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698955; cv=none; d=google.com; s=arc-20160816; b=JICFyTDK6b/VpakhK2uErXbL4Vn9atfsp6bkMSO+9T4aG99kjUVQ5UISzWDCDvABPo 2V2C4ivDJoBgOKWb4PNdC4+OA7N3C11rD7ZcYF2Kjz3UDgkUtUT9Dh6aOeUrw70fmEOO JmPge2uz8HvQj5VnqPu81zaj+PGbzUbWdgP8YH/IQeGLmyNQYlXVXH5al9UKuGPew1yy Akav+HHOLrW6ZZOWs5H+nP4j3RlxL+V82s67pUJpIKeGYnQLGr2nrMWqTuDj/ANvYZFy a7jRl5XIrDSKdH9yErQb+b0ZU3u81QNmb0DkkAI7oIyACHH39qenfTqTaBl/vlmd4S8/ M8IQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Y5ObnE06Iw1zm11A8lEwP2XJK84yKCLPyuOIHowzi4E=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=iwVOraGJjoEbywp7mYsgZYrygIHf5UIfVAdMlVW/KxzyiqBSlKbSofaaf5LBJk5BQc xIKs14dXzCsJca3m2iL4Pr++0or/neJBb9+Bycs1RAYDeXd4vsYA/GIU9lHWgIQtUPVU Fdn46P2E7RBBmkuqFRYRTL39t8efSE20AvNGjih39NgsvM0y0hOYDZjZX+rL6tHCtRmH eDAZ88bPMMWDy8Q8ojx3RmcHmudRZov3FoZHGEuRqueSKHEdDK+nzzIpWGwkVpJny4SM ZsKVhhPwjVqLTXk9P8hkOFXRAgPtQhwHeoE7bUh0MMYkQpQbftFoupcVjVr2CCPCklKc 2sgQ==; 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=ZLLmPgqc; 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 t9-20020a056402524900b00564f9cfbf3esi2463427edd.204.2024.02.23.06.35.55; Fri, 23 Feb 2024 06:35:55 -0800 (PST) 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=ZLLmPgqc; 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 351E668CBDF; Fri, 23 Feb 2024 16:32:09 +0200 (EET) 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 38B1D68C5EE for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=ZLLmPgqc; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id C765B4D64 for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id hErfsOvaGn1M for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=pVG5oHMAOiVSxlX9abUs9QVjHky50WMFO4ncQI0sOXI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ZLLmPgqc3PtMaBJrO8A9/vVwCRkd7iDr0O5tkExHBd/0RCt+r5H24PglqpE01IWmT EYBDPMPR03GmUjtoAkOH2USZaTRiPjjwBuITRk/GOiU4e+Ye98ARQ7/2GouwOS/iRg 6Yc32E0vvqF6Z+uOPHRt/hVHjwaSJrSa4R5HNJuFfwMoPSnar78kOwDTKrvRjFI1Rb jood9juAV3ocT7OWITFC3GRjsEtUhvGntlCmDyxjFXHUWPTeaPuQK/m6jlFUPZLjrZ WMzv34wEMF7Z8rrPl/bfP8B9MkSh3+thhHOt/lg5oWGYGurUtTP0oL0HQqZqAM31BS Hb4phIHgD3MLw== 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 D2E734D56 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 19E8B3A25D3 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:49 +0100 Message-ID: <20240223143115.16521-28-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 27/38] avcodec/pngdec: respect side data preference 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: YJtcTKaBPL5G From: Niklas Haas --- libavcodec/pngdec.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 026da30c25..8f409c74b8 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -660,6 +660,7 @@ static int decode_phys_chunk(AVCodecContext *avctx, PNGDecContext *s, static int populate_avctx_color_fields(AVCodecContext *avctx, AVFrame *frame) { PNGDecContext *s = avctx->priv_data; + int ret; if (s->have_cicp) { if (s->cicp_primaries >= AVCOL_PRI_NB) @@ -678,11 +679,15 @@ static int populate_avctx_color_fields(AVCodecContext *avctx, AVFrame *frame) avctx->color_range = frame->color_range = AVCOL_RANGE_UNSPECIFIED; } } else if (s->iccp_data) { - AVFrameSideData *sd = av_frame_new_side_data(frame, AV_FRAME_DATA_ICC_PROFILE, s->iccp_data_len); - if (!sd) - return AVERROR(ENOMEM); - memcpy(sd->data, s->iccp_data, s->iccp_data_len); - av_dict_set(&sd->metadata, "name", s->iccp_name, 0); + AVFrameSideData *sd; + ret = ff_frame_new_side_data(avctx, frame, AV_FRAME_DATA_ICC_PROFILE, + s->iccp_data_len, &sd); + if (ret < 0) + return ret; + if (sd) { + memcpy(sd->data, s->iccp_data, s->iccp_data_len); + av_dict_set(&sd->metadata, "name", s->iccp_name, 0); + } } else if (s->have_srgb) { avctx->color_primaries = frame->color_primaries = AVCOL_PRI_BT709; avctx->color_trc = frame->color_trc = AVCOL_TRC_IEC61966_2_1; From patchwork Fri Feb 23 13:58:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46485 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994606pze; Fri, 23 Feb 2024 06:35:48 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVCZxveM/9xfu3pSLvXkAt06iip+d6jFiT8icDg+jZspCQT0yX24sTglO8+OS4AHvnc15R8Z8kIO1mP+IOV99ggS/v+l4ZbbmuJvA== X-Google-Smtp-Source: AGHT+IEJfXLs5MlQI0KNDqcrOwdEmBCyy8QsyxMjHu6w/Z9XTXZV7IzSJnxzT5fvgmUV2qKs3Ojf X-Received: by 2002:a05:6402:1a5c:b0:565:874:8534 with SMTP id bf28-20020a0564021a5c00b0056508748534mr282edb.29.1708698948037; Fri, 23 Feb 2024 06:35:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698948; cv=none; d=google.com; s=arc-20160816; b=iQYE/81WN/j2TeDvpjQRQbSKhVZG1/GSXYN2/4FI2GTn36Stj6t+p4EPcdyl3xXlzp Wc1e4jl22vSOFLGPJGdSYo23Mt4n8HRaSeEEoyrem5maqOhvj7g8tWDHRs0cZ+L9zHPx qr5O85xPJDTDOCb47VRFCXmED9MtAkldXWNJLdPtY4LiNJwVlaU18gopUGyxyyMFzpkU 4odJvG6y6y7l9HghJ3x71yIiZdk2S5Xbzly9KT3ZkWdojdz64XlmWjtjyO7W1FYqD1Fc VCBwRvo/x1gVNRnOqW1MYS95sk6Ybf/F+wF/bX8SaJ6LwV68KBJ6af29R6nbsWs1eain 0e/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: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=6wpQafBfvwDQb6dXW8v/nfUA69Jcih4WKOo1k8xEJ/g=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=wTDjCWsITLgXWdquSpOLHE8g38K/To5qndI3TUYcmCiKzkfe6mSeU8TCnKxJPqpGNa SB5esE4E+buiLLeeFaxlsa+sqnosJZyIzpqVlibKhd/JSlxEaLIe8q4x0CalI2prWKOl nyWVRjXd8PO6CMU++3roUlSIAuX3r5ghYE9G/LD1b4LTr0hGgcU8z7PxTll9nj66hN2H u9wdobi+cTsA91xnqZZIWaPSoHASuj4Jyrom2vI3ScwU5p2k4bUjwzZ+gMyVMoI0N0fS xmVvJq26yBkRl2Tqs3exOYVd9zsSrQJ1D1Z5fmTqV9jxm6j2140oyS2QoMDiWijsV2D1 QIzw==; 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=U4ozdRpg; 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 a59-20020a509ec1000000b005638bb1c69csi6357399edf.374.2024.02.23.06.35.47; Fri, 23 Feb 2024 06:35:48 -0800 (PST) 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=U4ozdRpg; 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 B82EF68C737; Fri, 23 Feb 2024 16:32:07 +0200 (EET) 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 4304468C6E0 for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=U4ozdRpg; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 1FB3F4D03 for ; Fri, 23 Feb 2024 15:31:36 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id W2Fj38g-tsyl for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698689; bh=TPDkFm7eU9JkbN2tmYNO7xKd+n0ylzOPrqRx2OcyZzg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=U4ozdRpg8BR7s0acCYyKxzr9Gju2Q3FTvOCMENVgos3sGYXdcR+/X7Wp053lNDlzb 8y+D0bhIdM6eqi7jtXQtFF8sqC2GCIGcmbfYXRlVIqAg1+spZmfLzPF5oFqjNnL4fl YBLXLvqsAQorL1MVlltkg6BP7i/hlg5MLfQZIY830QezzehWo8+5mlKeofMGhJ9StR m0W76KFqikpuXjKK+WcpeZyuHvq4XyK0DtUyySxXgFYt3b3dQ2o94J/C+iZmnjYRTe 2zg2IwmcZt6sVaoeNN2Isr5F2mwkuJwwVw7jedRo8jglg5lcnDYcWkkKz59Pm6dqFD Q86KWZbpF2Z2A== 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 D57144D58 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 255C83A25D4 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:50 +0100 Message-ID: <20240223143115.16521-29-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 28/38] avcodec/tiff: respect side data preference 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: VU1p6LyDicnv From: Niklas Haas --- libavcodec/tiff.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index 71cb703821..cb4d378753 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -1706,11 +1706,11 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame) if (bytestream2_get_bytes_left(&gb_temp) < count) return AVERROR_INVALIDDATA; - sd = av_frame_new_side_data(frame, AV_FRAME_DATA_ICC_PROFILE, count); - if (!sd) - return AVERROR(ENOMEM); - - bytestream2_get_bufferu(&gb_temp, sd->data, count); + ret = ff_frame_new_side_data(s->avctx, frame, AV_FRAME_DATA_ICC_PROFILE, count, &sd); + if (ret < 0) + return ret; + if (sd) + bytestream2_get_bufferu(&gb_temp, sd->data, count); break; case TIFF_ARTIST: ADD_METADATA(count, "artist", NULL); From patchwork Fri Feb 23 13:58:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46480 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994133pze; Fri, 23 Feb 2024 06:35:05 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVSKIfK3hIXuaJ+XmccBRxcJT+YOKuO8k61qsf8TvYYkiDjfOkTFGkOpjVmJupdX3iIxb1hOWQ83Q3yGGJLeEW4BN0tfDrccm7KDg== X-Google-Smtp-Source: AGHT+IERPH2r8mIFDNJWl+HprbIqK3Y//iH2XItZLCiEqwVaMZRjw5/U+K2Td+XVaR8SZB/O4D/w X-Received: by 2002:a17:906:d20d:b0:a3f:ce31:64d6 with SMTP id w13-20020a170906d20d00b00a3fce3164d6mr1194313ejz.10.1708698905196; Fri, 23 Feb 2024 06:35:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698905; cv=none; d=google.com; s=arc-20160816; b=WAtQZ9SRDeoY9lEKHuIpvrlvDOIkzBbyK64xNbfExa5dNrAt7Bqmbo1B9tF5wMEdHn VBg/xYnoFQYcJDm/lbVvEvX0LGwFW554qebuBmbtLbHpk7JVhCE48NtyO6zSK7QIvjjh gizVHosx6xzhYiURaSjK21l/oi0m9I3cgZ8/2Uq5FlNGr3R/l7mF4EeiRUhVIuntOEQe omPEe5mADAqpy4lS6KfkbAD+J27RH1YKENgbfciYP5RtfZnNTy4yK5mJiKyZTlVhFZie KBMHiIj+GxIg19FgA4HdBrOB9gFuD9rPm3OifxZbjAZ7WVE6HC5JzPckPkY2tqPW2i9J ZWzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=oMFKe/1d4tHyWfKDIcjO/V7SFYvjzKPp346tZz3ODIQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=nl2CstPxNRh44mpU1qIs5dUENAWckbYiWK352oM1Tx7gl1K0t+v298kjH39alMrNqO CPZcJSKKm+Bp9ZZqHohtcvb7B/yyAwEIfrJLuW8/NL2sG2JmTNx3Nf7cycnV30D/QDPj hQ9hA/Lp1t+FLHhqkTO2kw2MJxMs7sj5Mx7hSrf5Ac/Y0JYMvBGFMJX7jAtmmq2SQVPE j20VEH1ypwQG612dpa2YUBVPPWalbnoEA96WrPM1gPdjGyNzGk53z4K4QGUkkXThnICP QSTNJQx68SHJk5apN2SSaC15QWpesafDPvmBIJyxc7clKQSgl+jIs7AP7SR83meAiUg3 uvSQ==; 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=hZSp1uQe; 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 bt22-20020a170906b15600b00a3cef5fb400si6197093ejb.391.2024.02.23.06.35.04; Fri, 23 Feb 2024 06:35:05 -0800 (PST) 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=hZSp1uQe; 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 8BAF168CAEE; Fri, 23 Feb 2024 16:32:02 +0200 (EET) 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 2D7AE68C6D3 for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=hZSp1uQe; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 2095C4D59 for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id cxhxm2v0EwYr for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=ctF8Vwbp+i9XsNbdA61/+VEtz26ZeDKwpbgM0mEeIM0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=hZSp1uQe/lEmDj0L9snakkaNIz7xaHMLZ1z9KxqaT/tdnjkFMhB/FiPEyxoW6wqFh +wbHg6mgEl3/l63Aet2Wskb0CMulA/B48gU1d+6lngWO71PxUZvP4PtNnpsD82Q80z 0Vw/RHWFNavoxw2oKg6CaO5dKrdN/Am3PgxUByplTOCiCn74RHKeRblPYvvSqXQgrM v6xTIuFim8PwnRAsRMY434d1pahG7wSr8M7FyIsQBW4P1FKr5/WL3c6IyWI6W1+Xku RvdHdXxo+KMQqHfggT4vw4U1wRbO1izSnA/twY1yBwHOzhJc0eD6IU6bSHEHEG3HLt hGg9/W7GrRB5A== 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 38A3B4D61 for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 315B13A25E6 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:51 +0100 Message-ID: <20240223143115.16521-30-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 29/38] avcodec/webp: respect side data preference 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: MEQkRVOZVbcT From: Niklas Haas --- libavcodec/webp.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libavcodec/webp.c b/libavcodec/webp.c index 54b3fde6dc..9308ea2b69 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -1500,11 +1500,16 @@ exif_end: "VP8X header\n"); s->has_iccp = 1; - sd = av_frame_new_side_data(p, AV_FRAME_DATA_ICC_PROFILE, chunk_size); - if (!sd) - return AVERROR(ENOMEM); - bytestream2_get_buffer(&gb, sd->data, chunk_size); + ret = ff_frame_new_side_data(avctx, p, AV_FRAME_DATA_ICC_PROFILE, chunk_size, &sd); + if (ret < 0) + return ret; + + if (sd) { + bytestream2_get_buffer(&gb, sd->data, chunk_size); + } else { + bytestream2_skip(&gb, chunk_size); + } break; } case MKTAG('A', 'N', 'I', 'M'): From patchwork Fri Feb 23 13:58:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46478 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993971pze; Fri, 23 Feb 2024 06:34:49 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUkVofSrg6Wxjjg/VPHR4gBPFWJuXEsQ54I1+TMe2t+ZF9o6tQq6Zs0+Wi6fpx23atHu1uqknYMZKvGy5urzuChkTJFOVhUYU2QXw== X-Google-Smtp-Source: AGHT+IHsCFaJgacE/T1/m0F5yHGBg62SR7wylQ72WRphm8G4LADGBGSIfegn0HN6htLUXb3bsC2F X-Received: by 2002:a05:6402:1487:b0:565:7ce5:abd5 with SMTP id e7-20020a056402148700b005657ce5abd5mr8875edv.18.1708698889553; Fri, 23 Feb 2024 06:34:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698889; cv=none; d=google.com; s=arc-20160816; b=Fo4V3VAJZ1tOYahxJTW1qXgB7A3LgKY9I1n01g4RzFfXCyi+mAvNfspnqlAS1d9xEW /hB77cpg2AjVZo19V8FNOM282dc8RFmwmdZLhduokQgNYoPgFSmoveAXb/OofN8Mwd5d lKzoDnIiSjUMVw42DtR4m1hfeF6GSShDwiUDcgA3T24niBABiIVUuSxiVeM75p+nK63c nMyv3S4BFn2FHUSr+V3XNS99DKgL4BgB03+oX1wF1eCI0V+aDqJ3B+rby6/6DGOXc3ey BXVqr1lcZR7ceHSx2MWzjEwaZ9dBJBBFZrmPZ0rL39Lrp97xdDV3Dx9gdWnTWEHAT1S1 D2cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=8WrsyJahUP/w5J9hgB7ZCyjKhm9fD/k2Fp9BJXOPALU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=hbt1DptQj40Ca6ZEO1jKJWOCN9hHUHJQR5ugEFJoa/vXxUBoOvi1FG+jHI3NB9+zkn Nk9xFDQG8tQXbIaBp0VW18YkrPANXSnZSLEDIKB+LP+LkKKk2eH1b1pOrM3iHb98lEeH Sg21OQqN1GCKYhf0uzpwKuswAZMHi4TUqXvOpLAE+0JCkHonpMfjUjsECT9TdFp4UDw9 JJay8gAStoIehfKoAJ1O4oa+QXsdZihDhNH0ruMCSLYUw8IhUcnacQdq2xmAaH16pnjP B9ePuG9MSYov0OLnWtf0YcZhwyXOo7hrt/5ynxO93Vd/LYp3TAtyK/sqXbZs9P/NxPvM yE7g==; 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=EoV0dzcO; 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 v17-20020a056402349100b00564bbfc405csi3722858edc.451.2024.02.23.06.34.49; Fri, 23 Feb 2024 06:34:49 -0800 (PST) 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=EoV0dzcO; 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 4396B68C6D3; Fri, 23 Feb 2024 16:32:00 +0200 (EET) 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 EE62568C64C for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=EoV0dzcO; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 259DE4D49 for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id Hjl2Gx7UTAtP for ; Fri, 23 Feb 2024 15:31:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=jpFAEaFMneLLCBh8OkLEYFmMnC6rUkbwslvVkQJUb/w=; h=From:To:Subject:Date:In-Reply-To:References:From; b=EoV0dzcOiE6K3D2glZOmQzSL0Jk2hEBCfD66UQUDrbf7LckyDKi5AhipPMrXLG4UQ tDS5bhMDBt9aoVWo7zBV055g2BPG2aIG+mgW4vsNbnJgF2kJZ/dNQSdRzfhWTipVPv AzdBkQRIa7pbpVnJ3/Im5DuWPuoJZ9W8aFjN6ZT1PDRsgDJcDbXI08SqSV5Iqw4BJA 7WtWY35YB2wMHE/c6bTg9mXvRXCtWc/gtTlOhbDFQoRGzWHQd5E6egPtHE8KlX0i6M KYY02IfVhmdxYWcVpYSF+exD436SDU8Ay1rutsZ/l4STMPRZ0vtXKQBcpVwXv2p9W+ fAXQsIOGqKFFQ== 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 0223E4D5C for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 3D2563A2606 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:52 +0100 Message-ID: <20240223143115.16521-31-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 30/38] avcodec/libdav1d: respect side data preference 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: PGGJpjYtC+rE From: Niklas Haas --- libavcodec/libdav1d.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index 78a5c63bf4..f002c994c1 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -561,7 +561,7 @@ FF_ENABLE_DEPRECATION_WARNINGS if (!res) break; - if (!av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_A53_CC, buf)) + if (!ff_frame_new_side_data_from_buf(c, frame, AV_FRAME_DATA_A53_CC, buf)) av_buffer_unref(&buf); c->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; From patchwork Fri Feb 23 13:58:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46483 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994431pze; Fri, 23 Feb 2024 06:35:31 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVRLsVi9SU27QadvyK8LSsQt8hBZxggSGmEvjsmJX71hPD3Cjq+i3vEoSKmM6vQORbQpfEfnuvrKemslKBxdob5H9ja/+rvbPmx7A== X-Google-Smtp-Source: AGHT+IF/Myw+eAnxo06id8mUB72p/J/Wg2Sks+gExdAc2stDWQDDtf7lI2tYJJxj7bBW2W0tPtdA X-Received: by 2002:a17:906:f14:b0:a3e:fd30:5859 with SMTP id z20-20020a1709060f1400b00a3efd305859mr1213422eji.70.1708698931386; Fri, 23 Feb 2024 06:35:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698931; cv=none; d=google.com; s=arc-20160816; b=nUxHPjZYC1WBPLrAz0un41FVlvLwyo47zOfMjwaFZUTH7X8uYpOJONtbMXEsDnxBn3 F7wk4x8dJbwUtZYC9i0Zi8MppJCM0RU8vS+PqbfypADoiwyhlZNCiMJhSRhCjRn5RNEZ VKzXz2FquMZJ7Ki+pYBaeDP4l/3sO61wpvZ11/cLXorsd8MzJFN9Sg6SDMIShUR1L/Vl XCZYDGXy7Hw7qAEbkzb5laZ8plb4PzRDqFq0kyUzSct5KvKaVtcueo+/NQGLaxv77wif KU4pd8WRj2PJJoI+h5EatajUIwBe994U7foodDFD7DHE5hiHU1xofstwPShJwLJRCbGR og9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=In+hV6QVmzgAgLF59w+4BQRZrdKcsUfk5cBomlmxM4I=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=IWexsSU8ugo/UprjPPZj/e10RXmiAMi2XPRXk5MtCdcmjcOtUamrp5/3XLxh43iCfc VSvjLE46L4GCMN/Zqiy7j0Vl6QP2vyOZrapsTbmgUYhGR1LmdOSbYuz7qfY6ll8WNV4E +gNtnf9lobd2NYycBn2ppnLdFslXyTRnrMHBnXIswzOQnxmrHV0BEAjElZ0gMCaAMiEt EisD9djv+tylEvJUgngUNoQhWs4zDAkejZMwdkGUpcOiAUG9TpvHPXgwvVThvTtC7msJ tbPkzjy7r0mueHud0aeXKOYsWc3I5gX5Zp1qa6CdAIfiBLrqZAjvaoQgjmkySse36a/x EU4g==; 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=hJTf1CWM; 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 i24-20020a170906265800b00a3e5aa9bb7dsi5419489ejc.436.2024.02.23.06.35.30; Fri, 23 Feb 2024 06:35:31 -0800 (PST) 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=hJTf1CWM; 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 A4EFB68CB95; Fri, 23 Feb 2024 16:32:05 +0200 (EET) 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 2D5DE68C6CE for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=hJTf1CWM; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 1448B4D3D for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 7PcW41pz11Ql for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=vYl0cPpXz/V2IbEiGTh0yYXkfTihCYmyXgZ6YRDXqGI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=hJTf1CWMeq09KC/8PYa+Y/F+K3R7sdrIBiRNOt5BinDdQWukALC6AcEReYoesmsf4 hrfkitnROsZBsbA5U03raq1UtYWm6bX7sdkvZ/qg+BSUkx5ouLQxyXGd0q9lkN3LPh m0EHoidVssUjFaYj15x7nPMd9lbDFI665YDFLOHOONWk8M3cwd0ywyVmZ/XVdhaevV DYc+cxTt9cFhTVWiNfX9d6w2oDMTh74q1jiUclh+sYPcH9sZVVPEn1+dkCOlEPTPEP 5LnmkglcvO3qyNu8xtYxvmgdTJredaWeRx9Um63TQLx44IMiHE78wOKRtC1c1xtD5U K6gXIqq2NN1Uw== 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 365CF4D5E for ; Fri, 23 Feb 2024 15:31:27 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 48DA73A2611 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:53 +0100 Message-ID: <20240223143115.16521-32-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 31/38] avcodec/dpx: respect side data preference 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: CAMFRF8h/rLW From: Niklas Haas If the time code side data is overridden by the packet level, we also make sure not to update `p->metadata` to a mismatched timecode. --- libavcodec/dpx.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 31e4a3f82c..80616d98a2 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -287,19 +287,21 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, tc = av_bswap32(read32(&buf, endian)); if (i != 0xFFFFFFFF) { - AVFrameSideData *tcside = - av_frame_new_side_data(p, AV_FRAME_DATA_S12M_TIMECODE, - sizeof(uint32_t) * 4); - if (!tcside) - return AVERROR(ENOMEM); + AVFrameSideData *tcside; + ret = ff_frame_new_side_data(avctx, p, AV_FRAME_DATA_S12M_TIMECODE, + sizeof(uint32_t) * 4, &tcside); + if (ret < 0) + return ret; - tc_sd = (uint32_t*)tcside->data; - tc_sd[0] = 1; - tc_sd[1] = tc; + if (tcside) { + tc_sd = (uint32_t*)tcside->data; + tc_sd[0] = 1; + tc_sd[1] = tc; - av_timecode_make_smpte_tc_string2(tcbuf, avctx->framerate, - tc_sd[1], 0, 0); - av_dict_set(&p->metadata, "timecode", tcbuf, 0); + av_timecode_make_smpte_tc_string2(tcbuf, avctx->framerate, + tc_sd[1], 0, 0); + av_dict_set(&p->metadata, "timecode", tcbuf, 0); + } } } From patchwork Fri Feb 23 13:58:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46481 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994227pze; Fri, 23 Feb 2024 06:35:14 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVFzeG1binVL3jqmbN/OslX2oBvq85HSUd8xkuubdtElQVdJ0UD+3NcNGANbLR1qSlqTh7tbwQ18O0fff0/VqMiisK5TTV9x5/VaA== X-Google-Smtp-Source: AGHT+IEeYyBxVB7b9Wamx2AKd/tKzT0BMgEJhTWpHdxm4Z0ptIEI73glOVb7porBFdrntWwTxGqu X-Received: by 2002:a17:906:57c9:b0:a3f:50ae:52d with SMTP id u9-20020a17090657c900b00a3f50ae052dmr1123ejr.10.1708698914144; Fri, 23 Feb 2024 06:35:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698914; cv=none; d=google.com; s=arc-20160816; b=YKLsqLnrEptj0tYhfNCb/tA+/2+w5T60Z4L6OdA2ZARbev+MIPnaT50mLo3y24EUgH eWlpF5HYFozQkDpMnq2WFUv3tC+h4PRxI/bF0jIJ5wO/8Op19BvvNs5iRy6BrFloeta/ pFn1G2MCmxxa0jflUJIM06wi3NSrSFvQ2koX9szIpR8s6eQsG11GDxx8w23MkeL4mABX A/mjEPLy0gKyRlN+WQH03OV6R1Smp3qblLqMyNBF3a1m5PytH5D+r3BMLu5R1g235LXx USsE2bb+L8cn2RmOLYQPLtyCODLPKhwGuP0izOvFq+dHpfEWqebeLFLruHJzYxDkxkHA yP+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=nn4hAhhrPOwzEhaDahhbjmvor6MuiBN4o9BetQDjkUo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=sz8FxN9s94ooBwgvIOzWIlLCjoAz/gwv5kup2ZWeUH3U2hdip7IlpHm0q1xkpcoBQ6 Hl9ASzSCUj07cIrmJx3W9dDVUD8Z52E/K5c/DYMjQtLLb7cM9ptageL+6lauXaq5xyHQ 3dvm60IVC+IMN7jFUt+Ouar/XF6WaH+LlzojsBx1vV+bPpbnOQmrBx6EJe7A6NwUlg5D S1Rg1dvlXinm2UDQ3j+TpQV1iFDLpaTX7kEvfp5uoF3Rr7EIlyFC3XANvb0WR9lncV4f kM3wuGoZcQ4luP/+mm/HatzhEJxogKPk2J+/4kj3ekNW5D2PDG+mmt2YuB1N543cx4TO 8xfA==; 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=ZeF9inHh; 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 d11-20020a1709067f0b00b00a3ef02c97cfsi3462007ejr.710.2024.02.23.06.35.13; Fri, 23 Feb 2024 06:35:14 -0800 (PST) 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=ZeF9inHh; 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 A8B5A68BE3B; Fri, 23 Feb 2024 16:32:03 +0200 (EET) 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 2D49468C6CB for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=ZeF9inHh; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 710614D4E for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id wiQteyHWtcyx for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=u+PD/WZSB8sig/VU8p4bPxzoKwpknif6ZFkFAXQ4bD4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ZeF9inHheswC5HRJ3zg4vVqmC4qazKjPYHYK4dl+icimF7SaG/lglF1mgOWddkrvg msoINvPr8FPzIRMN5XmvIhZi/4B74jpzLjSXJr7nQ6TNndsgOupWQPp3rBS8Mc2xEP F/JgeUzeNNSmwUQVnatemjxHfvXDdCrd6XmyQG3G463VVeK7pjTri+GbhmNYTlAdCH 0PhwqrHpfB8+10YW4DRkf29wzlHcDfbDXQYDd8QLF3Q07YH0GWdVGTeootPssVekns 6NyfnHzYM0SFmMqc8DQELhBVCZVuuov2yrkIAW5EWGk0PiLUlSA5g7+X/1OC7hyYeV 8Jbyzl74MBgCw== 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 1E7254D5D for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 547CC3A2668 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:54 +0100 Message-ID: <20240223143115.16521-33-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 32/38] avcodec/mpeg12dec: use ff_frame_new_side_data 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: ne922V4CZwYo From: Niklas Haas For consistency, even though this cannot be overriden at the packet level. --- libavcodec/mpeg12dec.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 96987f5a8e..1038a08637 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -2532,15 +2532,17 @@ static int mpeg_decode_frame(AVCodecContext *avctx, AVFrame *picture, if (s->timecode_frame_start != -1 && *got_output) { char tcbuf[AV_TIMECODE_STR_SIZE]; - AVFrameSideData *tcside = av_frame_new_side_data(picture, - AV_FRAME_DATA_GOP_TIMECODE, - sizeof(int64_t)); - if (!tcside) - return AVERROR(ENOMEM); - memcpy(tcside->data, &s->timecode_frame_start, sizeof(int64_t)); + AVFrameSideData *tcside; + ret = ff_frame_new_side_data(avctx, picture, AV_FRAME_DATA_GOP_TIMECODE, + sizeof(int64_t), &tcside); + if (ret < 0) + return ret; + if (tcside) { + memcpy(tcside->data, &s->timecode_frame_start, sizeof(int64_t)); - av_timecode_make_mpeg_tc_string(tcbuf, s->timecode_frame_start); - av_dict_set(&picture->metadata, "timecode", tcbuf, 0); + av_timecode_make_mpeg_tc_string(tcbuf, s->timecode_frame_start); + av_dict_set(&picture->metadata, "timecode", tcbuf, 0); + } s->timecode_frame_start = -1; } From patchwork Fri Feb 23 13:58:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46475 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993746pze; Fri, 23 Feb 2024 06:34:25 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUUY5qbkOrxIf7bBSWNn/eRQzL1TErrtL+KRPAgBpt3mVtlwF86qg1J9yn6Tlzpu+gaQzWhbTqiBJ+Ew7En6spBJI4qEzdt2k/A4w== X-Google-Smtp-Source: AGHT+IHhxQVaV6SKetE4J6/3HdP2UMxQoQSxn8jfYT5hJeOCvBbgjtnpzvGgglYs0TFUIox7ShSe X-Received: by 2002:a17:906:3e1b:b0:a3e:66b5:d65f with SMTP id k27-20020a1709063e1b00b00a3e66b5d65fmr1241784eji.67.1708698865346; Fri, 23 Feb 2024 06:34:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698865; cv=none; d=google.com; s=arc-20160816; b=RliaxLa6FgPIWAGSeIGvFzKezybLyQZ0D2ubNCdpGN5mFMkRpgibQ+r8WhTQzzW/s3 Cex1c/g0Vlw4macSpzhFo5nRzoMGGRACeobhnfNhiO6vDHJ1RcaJTlSfXBccKus/Wqnh FapwvJV/niSIwV3IfrtG9i7PJWhqjZJoxPunbx8xz34pw02yvOqXHwtSiI3ZL8R2d6b6 1Rj7C9shyptAum6nvdgOGrME4NUhTYXder4SKEPDjqWRjDc0bzySc1y1V06PqUXMSBFB PNsZkArbUNoaGX5E3462/XKafM8oRU+ridz0AoruOKEJ2OwCEnHeV2k4P0Fj9Nwi7EXS v+mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=7ldrZWmYBN+3l2ckcco3AKDUtFL/biUVeKTpkYPQ3Kg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=0pUWgkGMieVLfIeVa9Cvt7TDacNYmcyGqeMRDAePhwEz8RDtlZI3s0k4kE9xBMgFAM DQfC70C17YrzjaGpuqvxojbxjlFWK76UVpUVpmWNreuCt3JAD92dfi71pKhi7fqdkPQ6 CIV93yRx6Pe+VEyqJCo69wCsoJZOxzDbOfZqI3nrIXWtVLfhwPQJaL84ndNNTnBmTRoO NHzhT7nkCOvqM0BhVtwCiWeSlTNvcjnYqvrxBPbd5BLl4SXkzGzYMeQ6j+yUh4sifm3m hbg1jClIUX2NZGLHq7uMXFtgQaZ5PQnEnsnm7S6PJ2pRtRS7dli1ZlS95aiFqgL4/3QJ zwXQ==; 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="avS/54TL"; 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 ka11-20020a170907990b00b00a3e9e80160bsi4533727ejc.94.2024.02.23.06.34.25; Fri, 23 Feb 2024 06:34:25 -0800 (PST) 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="avS/54TL"; 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 4503968C80B; Fri, 23 Feb 2024 16:31:57 +0200 (EET) 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 D2DA268C5EF for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=avS/54TL; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 6B17E4D3F for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 8u79AdIo7eKI for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=LaNn+YcGFaXEStxgP5Y4Q8vd3uO8ZxeXRzeKPrMy3ZI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=avS/54TL67lNwugN1qrnWWPYkXf4sjBioiUXhw/7uWRFwYoylZQGAQ3Y71f4MQ2zj B6ohiEnnUma+uxif2Eca31NejCZrNtG0td6BMdX4itZ3ftf1g9598JWAsnFey9JTyz pdKydx441rOo30Jk77URA91reaNn1TmjHE7+MWdofCeyVE+PuRTPbyUnkGvUsDe3Bj VDtVdKWCLZgz0fPjJtsPESCAn6JljhllbrCzOlm03hIIy/vqoTV+HNDMPu5Ba88IUm WgP140Hi3JUZ4FlVRYMozGOf+hSSHRZLXqsNQ2bjcBsHkiHFSH8jXSu6+sX+NzY34J 5voC6HWafBPzw== 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 3A0484D62 for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 602BF3A26A7 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:55 +0100 Message-ID: <20240223143115.16521-34-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 33/38] avcodec/h2645_sei: use ff_frame_new_side_data_from_buf 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: s4shrZVcg/o4 From: Niklas Haas For consistency, even though this cannot be overriden at the packet level. Signed-off-by: Anton Khirnov --- libavcodec/h2645_sei.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index cb6be0594b..f3497d5568 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -35,6 +35,7 @@ #include "atsc_a53.h" #include "avcodec.h" +#include "decode.h" #include "dynamic_hdr_vivid.h" #include "get_bits.h" #include "golomb.h" @@ -607,7 +608,7 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, H2645SEIUnregistered *unreg = &sei->unregistered; if (unreg->buf_ref[i]) { - AVFrameSideData *sd = av_frame_new_side_data_from_buf(frame, + AVFrameSideData *sd = ff_frame_new_side_data_from_buf(avctx, frame, AV_FRAME_DATA_SEI_UNREGISTERED, unreg->buf_ref[i]); if (!sd) From patchwork Fri Feb 23 13:58:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46494 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp997644pze; Fri, 23 Feb 2024 06:41:46 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVPaq50FI5Biv9znNOSUu6Gc2hbAF6FYoKj6Rp6+YcCFV4ggkKue2lcffifKY2uZmXkS3KE82SZQbh0EwrgWNvhZX76fb/dYXt7xA== X-Google-Smtp-Source: AGHT+IFTFSUzWtax8t7GnvPFp6p45TQCgt37rraxZFtWA+GCIiQ5i6WpjYKZ9GVk/7/JYoAzvxcb X-Received: by 2002:aa7:c318:0:b0:565:eb8:ed47 with SMTP id l24-20020aa7c318000000b005650eb8ed47mr4898edq.35.1708699306395; Fri, 23 Feb 2024 06:41:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708699306; cv=none; d=google.com; s=arc-20160816; b=Edh2QhSNiPCbnZSPclwHuDaWRzZeY8vwuiexvC+M2CYftMN7g1QagOF9H+xP39+ve2 EO0U/1AKIS8Kcil54TNypfXKIoasAuE8WEO1ylNUNAzhJDA9JLQosHOlLN0/procd0ZK bBtnbPw7CRg+SVmwgr/QrGZpIbuaxJx0MuE2RT7SZ1+7wEbjjfsncPpQjgHM5Ve46kWO hqmOpEoLriTOzqocWhzs37imC38irFKflY/gMXLR4CnaxJ7BRV4XFo7isGzdTUy1+5bl tZnPZ3LYerGNsVPAf+seMG6dtFKWEQuRtw9uEYQt996dkrN1LwLXhDkjC4uXpDQsC0/N 95AQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=UVTHsiOBvyPmdDFjsRF1zGMdPuMGxwhN5DooB2CUsuw=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=S4qG9kTcb0IRDLNAEE8YOTgbI2qI9ezLJU3irQtGa4S+EYaNSJLj6AZBu1VyvobZKt P9mqGK8d+R2WQZW5ALyh3pt+xNtCw/tOBQeLt1s62LPcnpK/9vuciglMXXkOns23/Qs4 AH2tVMgqPwOk+8DkNTNnWSOhM+gj4C07eBaYQ/Dcw8T5sGDmeB9HbgzRFf5D2+FUD4ww 9oKDqZzUQmTNYmU1umnuRXjBcWCRnlsuv13YY+NI++cWRJzoAyyxnYQH6p52GlrXufHz RQwWL85M0Mjr3Io8REL5q9RnG11XHnb29G0pmhD2EtgXYuil+Mc2xyAyOWzx88ujOOv0 r1VQ==; 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=b3ZrAtdu; 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 ch15-20020a0564021bcf00b00560780137casi6361513edb.557.2024.02.23.06.41.46; Fri, 23 Feb 2024 06:41:46 -0800 (PST) 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=b3ZrAtdu; 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 25AE368C7BB; Fri, 23 Feb 2024 16:41:29 +0200 (EET) 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 5C8D868C66F for ; Fri, 23 Feb 2024 16:41:21 +0200 (EET) 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=b3ZrAtdu; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id F27374D03 for ; Fri, 23 Feb 2024 15:41:20 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id VbWmBK-0OfeC for ; Fri, 23 Feb 2024 15:41:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708699279; bh=fXPoo2w+fFlds322ZVhiyWPNc/EfLyjAbaEyEnesDAQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=b3ZrAtduvolsWuMTYJrsMJiVGZF4OCLJyD+OcIKNyvJtUaa8gAD68sFEOOgjcsj3X GF9xzvZYJW9NZrmtryRj6R7xFUSXT2XXeKI4zOvC2cjQsMR+hwGZ3qyfjGPDcVOJVO VmugY9aaaLVmXWyYYu1oRWwBEKloeinryQxbRaVpKpt8E96qaq2/l9mOf+ax+F0nRo MJ+vCkO5CrjjCknAb5Ju3kzBYzqqi19FGDl+WnNuPGWEvRCWc+coHzhPYDzzDcTyl4 TlIACrKPAm9xkDgYEyEKJDL/r6aHTlDEaA2metPVvJwIqcknDR3JhMQ1WtwodZGgCz y+3ahUD48cmFA== 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 C120B4492 for ; Fri, 23 Feb 2024 15:41:19 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 6BD0F3A2715 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:56 +0100 Message-ID: <20240223143115.16521-35-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 34/38] avcodec/snowdec: use ff_frame_new_side_data 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: H0NjAewWn5Dw From: Niklas Haas For consistency, even though this cannot be overriden at the packet level. --- libavcodec/snowdec.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libavcodec/snowdec.c b/libavcodec/snowdec.c index 70fbab9a49..97aea748b6 100644 --- a/libavcodec/snowdec.c +++ b/libavcodec/snowdec.c @@ -787,11 +787,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture, res = av_frame_ref(picture, s->mconly_picture); if (res >= 0 && s->avmv_index) { AVFrameSideData *sd; - - sd = av_frame_new_side_data(picture, AV_FRAME_DATA_MOTION_VECTORS, s->avmv_index * sizeof(AVMotionVector)); - if (!sd) - return AVERROR(ENOMEM); - memcpy(sd->data, s->avmv, s->avmv_index * sizeof(AVMotionVector)); + res = ff_frame_new_side_data(s->avctx, picture, AV_FRAME_DATA_MOTION_VECTORS, + s->avmv_index * sizeof(AVMotionVector), &sd); + if (sd) + memcpy(sd->data, s->avmv, s->avmv_index * sizeof(AVMotionVector)); } if (res < 0) From patchwork Fri Feb 23 13:58:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46493 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp997585pze; Fri, 23 Feb 2024 06:41:38 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXXpiNUM4GEre6td/6uueU4TGWzhtJ9RXeScj7fzlaMjdsNLJYDE2gXeDy5sBIvriO5IB20MZkNGiQQMQuwLEyIfZuo+L1NPV5MfA== X-Google-Smtp-Source: AGHT+IE1sMwkFsLWhpfnJMmLI+GZdV2DJofNQ7ib24f5r/5ojkb8xAY0I3AmNC7umxJt5R/C77bL X-Received: by 2002:a17:906:c419:b0:a3e:f929:8149 with SMTP id u25-20020a170906c41900b00a3ef9298149mr10313ejz.35.1708699298513; Fri, 23 Feb 2024 06:41:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708699298; cv=none; d=google.com; s=arc-20160816; b=JTCeEmapUElCQ2ddMINru2PZJ5bCClT14MvBA5pzfSnmN0HSf0dQg6DBhm9smlsiTc K2e5IebRP2XW15iFiDM9BqODWtxcBaH1HoJalDi2uF3ISfgBhIloSbfIG3eOgA2WmbFT iLtCwX1bV3yVuXSABsjt1X06QWV/O7K2DV1/qkopyQzsPHdXUiOP0Y4uulin0tmjGcU6 RdeS9PP774nD+hSK/fI1XDeTEvhycqioWu4ds3ev8DATGchOeWZMfNx9DhXAUY1GyX7B ElrXFHLNRdrZAv+g8kaANsUOrC66S8TZFlLDsrpzcEKAMDmUEDumVK7idHFH4vajI4Hy mXfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Na6mo8i0TdlSNY7FeNm4w+7WPKqceNjSxkM+k8RNyJg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=RTbgG/nYEN5du+sU2/H9AvJJRG7Yf0XpviYXDxyYki1qQ1vG+ipAMullrmmTDett1m pfiJqe7CCjrQ2p8zss29R4g87+4FLOYp4zHG2pSDhigJ+7169w6NoUngGNostCbgQTjp gDqwcBIjqLVyx+MChgjbmmWObaXMNPsD4xFo00lJ4bhGgnMYxS0/NX0EBxtI9n53u5ti kIh8s9SlaUQ0qbzWauF+ic4uA4FqlAFBF+mwMc/5lSqCVcV+6yRZt5LXQbcQs3WZD7fu wFpYdTOFajtBbw2z1n3fQfrFGPa10faX12+dRtgbh46/O1wWG00fWX3J5bOWKLPv3W6d VndA==; 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="hfq9DN/+"; 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 ho9-20020a1709070e8900b00a3e48268848si5803323ejc.450.2024.02.23.06.41.38; Fri, 23 Feb 2024 06:41:38 -0800 (PST) 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="hfq9DN/+"; 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 2D97268C6D5; Fri, 23 Feb 2024 16:41:28 +0200 (EET) 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 CC82268C66F for ; Fri, 23 Feb 2024 16:41:20 +0200 (EET) 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=hfq9DN/+; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 668B54D22 for ; Fri, 23 Feb 2024 15:41:20 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id E0crx6GZOw39 for ; Fri, 23 Feb 2024 15:41:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708699279; bh=DJfLlaeuoxLKxjUOmHwZSJbJyXOS/iO4msJB3PJRKWo=; h=From:To:Subject:Date:In-Reply-To:References:From; b=hfq9DN/+HnJfUMDfQ4X7qFg303gwQ5y7sKPAkhz82Z8rd5MfULwGeA+d7jUF1RrQJ 9VPEZxXdkt9wCDSztPZt0klTzr9jEpuVu4BG0YP+2RQmICWZ6ulvOtfexfO63U5XJT T8YyBzVJTTKagZ3h/ZW9x3BQH9HBPOQ9mcRkQmrEqBs40eo+w2k4d8vQc6RtHHPt8C yRYi+j/ReL4es7tIbY/D0XpwAU5ZMv43VDVe9TlEaBdpYT+cGtgd+9vLfmzXau0Tbp FndB4q72CyEc/iVwUzP91BG5LZ/+jJV4l6zpMvM3is5oSarjvguvOO4fe9/UWlIeJ4 qtS5zDDgRpLDA== 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 C47F84D03 for ; Fri, 23 Feb 2024 15:41:19 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 77C183A2743 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:57 +0100 Message-ID: <20240223143115.16521-36-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 35/38] avcodec/mjpegdec: use ff_frame_new_side_data 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: on6dyfUGcxlU From: Niklas Haas For consistency, even though this can't (yet) be overriden at the packet level. --- libavcodec/mjpegdec.c | 66 ++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 43b36d0a8f..4ef565fe2d 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -2865,42 +2865,44 @@ the_end: if (orientation >= 2 && orientation <= 8) { int32_t *matrix; - sd = av_frame_new_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX, sizeof(int32_t) * 9); - if (!sd) { + ret = ff_frame_new_side_data(avctx, frame, AV_FRAME_DATA_DISPLAYMATRIX, sizeof(int32_t) * 9, &sd); + if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Could not allocate frame side data\n"); - return AVERROR(ENOMEM); + return ret; } - matrix = (int32_t *)sd->data; + if (sd) { + matrix = (int32_t *)sd->data; - switch (orientation) { - case 2: - av_display_rotation_set(matrix, 0.0); - av_display_matrix_flip(matrix, 1, 0); - break; - case 3: - av_display_rotation_set(matrix, 180.0); - break; - case 4: - av_display_rotation_set(matrix, 180.0); - av_display_matrix_flip(matrix, 1, 0); - break; - case 5: - av_display_rotation_set(matrix, 90.0); - av_display_matrix_flip(matrix, 1, 0); - break; - case 6: - av_display_rotation_set(matrix, 90.0); - break; - case 7: - av_display_rotation_set(matrix, -90.0); - av_display_matrix_flip(matrix, 1, 0); - break; - case 8: - av_display_rotation_set(matrix, -90.0); - break; - default: - av_assert0(0); + switch (orientation) { + case 2: + av_display_rotation_set(matrix, 0.0); + av_display_matrix_flip(matrix, 1, 0); + break; + case 3: + av_display_rotation_set(matrix, 180.0); + break; + case 4: + av_display_rotation_set(matrix, 180.0); + av_display_matrix_flip(matrix, 1, 0); + break; + case 5: + av_display_rotation_set(matrix, 90.0); + av_display_matrix_flip(matrix, 1, 0); + break; + case 6: + av_display_rotation_set(matrix, 90.0); + break; + case 7: + av_display_rotation_set(matrix, -90.0); + av_display_matrix_flip(matrix, 1, 0); + break; + case 8: + av_display_rotation_set(matrix, -90.0); + break; + default: + av_assert0(0); + } } } } From patchwork Fri Feb 23 13:58:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46470 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp993237pze; Fri, 23 Feb 2024 06:33:33 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVyCjJfqwUPNEm5M6jdOP949gsLC3Hx82/1vgc4CpV4g8BfuP1eeDJIByEfZt9G1SQZM8YqAqmZ4fRxP5uv4hltnr23gXGejjZlOg== X-Google-Smtp-Source: AGHT+IFMxa5QaTzaW05KZd54cUWt8tOEyffvOfSqMAFx5F18KDqvTlELAKzhCOF33V5HAEEbmJW6 X-Received: by 2002:a05:6512:3b9b:b0:512:bd32:ed55 with SMTP id g27-20020a0565123b9b00b00512bd32ed55mr1785654lfv.4.1708698813530; Fri, 23 Feb 2024 06:33:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698813; cv=none; d=google.com; s=arc-20160816; b=NFNcRK/DE2v+L3bbrCO8b8ld60GGdBoRDRNE/3brE5WpovHB5lVi2/oNfBLUen6YUn uCYR1aEVdokrMV3Rf8SOI/rBWHF3PHHbm7M8ystJfXR8VovzUyUcRwrnXqd/xnBmzf/L r4HgTLaYd6StCJ4JqRFP/lbgGtq+ATQkTg1a2aedN4I3fGUIwL2lV5dCmekT/KuOuwE+ /XkfqnX36gPweLQA3+DEkFBqhrvPCf0lySdOPG7h6NogsWg/W39jQth5YRes3zW8lSow a5+sIBXkIIq6PuKk9LCIxdpG/BH/9gnHwYJldKncHEVqJCdqLttWRDwQm/SCK4cXkOkc tTlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=dpcAPmQQ3CO/xhMSUqcAl+QNWFFtQpR8pettDrZ9x3s=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=B99tPrJwgEdMhR0hgcuLmPqm5AhYlJN8k62v77MFkwOR+vPmVkI51F692rE0KVV4xJ mJZ7DqJx5e7yVuOdI+TEZ+hQXswEXVRFwlQLIrRPOWMb89Mj2nCbmIcibJjYGqQVcY0x NaMEIhk6J8Jit3Tu+8F+ia9Bh93AcXJByJlVMsuuqTTk6LCInAIsE4PnVLUEI8iYJD4U O2k9+m1cpk783G0lraF0F2E4I55jzOE9V5JkGnVXxk3dTHybjAx2BvIVMtIo6I5FWN/a QiqKHGF54sO6WbwfpMk2lkfFeHXtAMtjOF+C+R9miCh2MqTAY1fkreY6if4fbPqXH0A2 Jwqw==; 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="f0a/vBXl"; 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 ks15-20020a170906f84f00b00a3edb485acdsi3695867ejb.824.2024.02.23.06.33.33; Fri, 23 Feb 2024 06:33:33 -0800 (PST) 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="f0a/vBXl"; 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 DE41A68C984; Fri, 23 Feb 2024 16:31:50 +0200 (EET) 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 BA33768C657 for ; Fri, 23 Feb 2024 16:31:35 +0200 (EET) 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=f0a/vBXl; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 60DEA4D5E for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id mDGYICFeLKHm for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=28aC7klwA7/hcW1w4FKsSAyLEYWp46IUDxTxmGkRBS4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=f0a/vBXlxK4IODkbTKAAc+tpcWZXMWT5gGVw0/LOe1rvi0Zx8zbMGf/NGg1FWuRca gTtcPBKMgLEf9G43+ChBbWfoP5yoiBL6R0hhZMSPADAoBdpBZ0ka6kUS5JtJqn+I1z jxzFAk2wGuMcFisPEL1cWqxEvaqSYpyyzMrVdUFhqkvOV+YMrOfAvsR6aST5ZQ5Ms8 GChy3/KFyd4gEKbn6qWNbvRUqt/Gtg8gJ/6OdgxESk5k/fHjyAmnTSJ6H1oOqcGMB+ vCAMhXdYblmHbDO8RMPZRu3w2CM60toKvJwjO4jmnUvWgrM8U2fUrucxUYCOmlXwy+ erLt5FizvalXQ== 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 3CEE54D64 for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 837913A274D for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:58 +0100 Message-ID: <20240223143115.16521-37-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 36/38] avcodec/hevcdec: switch to ff_frame_new_side_data_from_buf 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: tuWywEBXfqkX From: Niklas Haas For consistency, even though this cannot be overriden at the packet level. --- libavcodec/hevcdec.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 0cb2577b39..e5213aa252 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2824,10 +2824,8 @@ static int set_side_data(HEVCContext *s) } if (s->rpu_buf) { - AVFrameSideData *rpu = av_frame_new_side_data_from_buf(out, AV_FRAME_DATA_DOVI_RPU_BUFFER, s->rpu_buf); - if (!rpu) - return AVERROR(ENOMEM); - + if (!ff_frame_new_side_data_from_buf(s->avctx, out, AV_FRAME_DATA_DOVI_RPU_BUFFER, s->rpu_buf)) + av_buffer_unref(&s->rpu_buf); s->rpu_buf = NULL; } @@ -2839,10 +2837,8 @@ static int set_side_data(HEVCContext *s) if (!info_ref) return AVERROR(ENOMEM); - if (!av_frame_new_side_data_from_buf(out, AV_FRAME_DATA_DYNAMIC_HDR_VIVID, info_ref)) { + if (!ff_frame_new_side_data_from_buf(s->avctx, out, AV_FRAME_DATA_DYNAMIC_HDR_VIVID, info_ref)) av_buffer_unref(&info_ref); - return AVERROR(ENOMEM); - } } return 0; From patchwork Fri Feb 23 13:58:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46489 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994896pze; Fri, 23 Feb 2024 06:36:21 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWcHo2yW+KKplDfOPt2BHAEyMnH+k/QqNYUnfcChh0aUSvqV5050LG6mRIzVm2uhOmniAvTULcC9AfltO7ZC2PLieS/LtiQcVTcBA== X-Google-Smtp-Source: AGHT+IHUDIcBeCvamWulIou8w8EoTOLkcnS3Gc04b82OQfYqjPPbnY1LFDzV3nINE5K0QnHMW2FB X-Received: by 2002:a05:6512:2349:b0:512:e8ee:1753 with SMTP id p9-20020a056512234900b00512e8ee1753mr1389050lfu.56.1708698981140; Fri, 23 Feb 2024 06:36:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698981; cv=none; d=google.com; s=arc-20160816; b=tuxhtcQSvkXkEVQKZT5L8LVLVkFF4qKp5eUNdD6UtZQfrhZMmaEA0IgnRIaB8fIFRU RwKmpW5os/AWlNM464Ezsj32dLyCNqeEpwDk82s9L6bbJk5PAZqgM7DLwfsMc46aaoKG STiR3pR7ELvnxreZ1SqQD6DrLTjGSBQv4oTvSO9nSGKG8QGRJn8hSlbd8yIfSf3KAfkH a5/9vA1gKri2E7u5S962L5zBWcEg7ObvJmeYw86ifseidJVcmCN1RoTkja763FD2b5AK ryiIBuBhKJp48rMPV73yUdL+A6bnRpLneMtOUREisvcqiRxjdJ23eaviKHzNsURIKpM5 MYZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=MUxoQaqxA477baRfs9WqvZ1yNuWpe1xqNvOx5gCx1s8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=cFSpfSbea4+Mkznn/3uULIaEPt6HBDdUIspoaHm73Edpn1/SYpcqRrPJSKBIvhVwSj B958zLu3VCkDv9lnjtK1ATVvsobDWz9uStp2BQetBoG7F4HhdBeW58EnqBM1Ezu0SR6T 3TLB/w7HkVh3oFUZbQ0MaN8kR6//B12IRG8p0f4uRMtuYHvgiKM8UOCdA4ti6kYthIGb OFVoF26YZUNc67EnJX4LxUgMhAd9JkVCFLe1l+3HrT0vCqpxXfIgQPBUBETyZgF2Okcr IRCSZjKbO0vFZ89Rqb9cRxVGCBXrRNNUBEedR8co+Lz5XbynXOPqdU/8kZI+o6kcDmo3 DIRQ==; 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=WoH1J8XZ; 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 a13-20020a50e70d000000b005640d58d562si6216512edn.534.2024.02.23.06.36.20; Fri, 23 Feb 2024 06:36:21 -0800 (PST) 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=WoH1J8XZ; 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 35B5968CC83; Fri, 23 Feb 2024 16:32:12 +0200 (EET) 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 3B83C68C65D for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=WoH1J8XZ; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 9713B4492 for ; Fri, 23 Feb 2024 15:31:35 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 1yeBEU58KE8p for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=6DEebR0jC1id8uZaGunwqDr65EbnBbxlITvUEVx3PqU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=WoH1J8XZlWSHtKV0yqMIIGH2CKXJYSgsV0hijMZPFSJ4k9KqQekTk/GmXyCcCMKwV 9fdu5S6UDsYL2THVtzbfAt+6KPB/Zo1+4cgzkKIRJFuCNKtL6l4Wf6a3X9mTvY3Deh DvN13c2SDyPXgAWd/f8wZbybO0kH2hnDLYuRrcXaQtVzNW/UHp2iOPZ+f17gYdghqL 9IkVV+KaueBcDhgsKYV8p21LPkGY4QebR0i1MUq06aQ7q0yKJKmTvy8pBqR3B/mSEA mFgHihKZmLKnU8JMVGDJNtC6Sy+pO3qFlTMEx8IWE2HnplgVREsUStlixphWNQbsCl pSbyxc3qzCaVA== 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 490104D69 for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 8F4D63A2761 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:58:59 +0100 Message-ID: <20240223143115.16521-38-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 37/38] lavc/*dec: use side data preference for mastering display/content light metadata 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: D1QGRjPvm8Ad --- libavcodec/av1dec.c | 46 +++++++++++--------- libavcodec/h2645_sei.c | 96 +++++++++++++++++++++++------------------- libavcodec/libdav1d.c | 47 ++++++++++++--------- libavcodec/pngdec.c | 54 ++++++++++++++---------- libavcodec/qsvdec.c | 50 +++++++++++++--------- 5 files changed, 165 insertions(+), 128 deletions(-) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 4fcfed3c7b..177c25f394 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -990,31 +990,39 @@ static int export_metadata(AVCodecContext *avctx, AVFrame *frame) int ret = 0; if (s->mdcv) { - AVMasteringDisplayMetadata *mastering = av_mastering_display_metadata_create_side_data(frame); - if (!mastering) - return AVERROR(ENOMEM); + AVMasteringDisplayMetadata *mastering; - for (int i = 0; i < 3; i++) { - mastering->display_primaries[i][0] = av_make_q(s->mdcv->primary_chromaticity_x[i], 1 << 16); - mastering->display_primaries[i][1] = av_make_q(s->mdcv->primary_chromaticity_y[i], 1 << 16); + ret = ff_decode_mastering_display_new(avctx, frame, &mastering); + if (ret < 0) + return ret; + + if (mastering) { + for (int i = 0; i < 3; i++) { + mastering->display_primaries[i][0] = av_make_q(s->mdcv->primary_chromaticity_x[i], 1 << 16); + mastering->display_primaries[i][1] = av_make_q(s->mdcv->primary_chromaticity_y[i], 1 << 16); + } + mastering->white_point[0] = av_make_q(s->mdcv->white_point_chromaticity_x, 1 << 16); + mastering->white_point[1] = av_make_q(s->mdcv->white_point_chromaticity_y, 1 << 16); + + mastering->max_luminance = av_make_q(s->mdcv->luminance_max, 1 << 8); + mastering->min_luminance = av_make_q(s->mdcv->luminance_min, 1 << 14); + + mastering->has_primaries = 1; + mastering->has_luminance = 1; } - mastering->white_point[0] = av_make_q(s->mdcv->white_point_chromaticity_x, 1 << 16); - mastering->white_point[1] = av_make_q(s->mdcv->white_point_chromaticity_y, 1 << 16); - - mastering->max_luminance = av_make_q(s->mdcv->luminance_max, 1 << 8); - mastering->min_luminance = av_make_q(s->mdcv->luminance_min, 1 << 14); - - mastering->has_primaries = 1; - mastering->has_luminance = 1; } if (s->cll) { - AVContentLightMetadata *light = av_content_light_metadata_create_side_data(frame); - if (!light) - return AVERROR(ENOMEM); + AVContentLightMetadata *light; - light->MaxCLL = s->cll->max_cll; - light->MaxFALL = s->cll->max_fall; + ret = ff_decode_content_light_new(avctx, frame, &light); + if (ret < 0) + return ret; + + if (light) { + light->MaxCLL = s->cll->max_cll; + light->MaxFALL = s->cll->max_fall; + } } while (av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0) { diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index f3497d5568..86a4c21820 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -516,6 +516,7 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, int seed) { H2645SEIFramePacking *fp = &sei->frame_packing; + int ret; if (fp->present && is_frame_packing_type_valid(fp->arrangement_type, codec_id) && @@ -711,56 +712,63 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, const int chroma_den = 50000; const int luma_den = 10000; int i; - AVMasteringDisplayMetadata *metadata = - av_mastering_display_metadata_create_side_data(frame); - if (!metadata) - return AVERROR(ENOMEM); + AVMasteringDisplayMetadata *metadata; - for (i = 0; i < 3; i++) { - const int j = mapping[i]; - metadata->display_primaries[i][0].num = sei->mastering_display.display_primaries[j][0]; - metadata->display_primaries[i][0].den = chroma_den; - metadata->display_primaries[i][1].num = sei->mastering_display.display_primaries[j][1]; - metadata->display_primaries[i][1].den = chroma_den; + ret = ff_decode_mastering_display_new(avctx, frame, &metadata); + if (ret < 0) + return ret; + + if (metadata) { + for (i = 0; i < 3; i++) { + const int j = mapping[i]; + metadata->display_primaries[i][0].num = sei->mastering_display.display_primaries[j][0]; + metadata->display_primaries[i][0].den = chroma_den; + metadata->display_primaries[i][1].num = sei->mastering_display.display_primaries[j][1]; + metadata->display_primaries[i][1].den = chroma_den; + } + metadata->white_point[0].num = sei->mastering_display.white_point[0]; + metadata->white_point[0].den = chroma_den; + metadata->white_point[1].num = sei->mastering_display.white_point[1]; + metadata->white_point[1].den = chroma_den; + + metadata->max_luminance.num = sei->mastering_display.max_luminance; + metadata->max_luminance.den = luma_den; + metadata->min_luminance.num = sei->mastering_display.min_luminance; + metadata->min_luminance.den = luma_den; + metadata->has_luminance = 1; + metadata->has_primaries = 1; + + av_log(avctx, AV_LOG_DEBUG, "Mastering Display Metadata:\n"); + av_log(avctx, AV_LOG_DEBUG, + "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f)\n", + av_q2d(metadata->display_primaries[0][0]), + av_q2d(metadata->display_primaries[0][1]), + av_q2d(metadata->display_primaries[1][0]), + av_q2d(metadata->display_primaries[1][1]), + av_q2d(metadata->display_primaries[2][0]), + av_q2d(metadata->display_primaries[2][1]), + av_q2d(metadata->white_point[0]), av_q2d(metadata->white_point[1])); + av_log(avctx, AV_LOG_DEBUG, + "min_luminance=%f, max_luminance=%f\n", + av_q2d(metadata->min_luminance), av_q2d(metadata->max_luminance)); } - metadata->white_point[0].num = sei->mastering_display.white_point[0]; - metadata->white_point[0].den = chroma_den; - metadata->white_point[1].num = sei->mastering_display.white_point[1]; - metadata->white_point[1].den = chroma_den; - - metadata->max_luminance.num = sei->mastering_display.max_luminance; - metadata->max_luminance.den = luma_den; - metadata->min_luminance.num = sei->mastering_display.min_luminance; - metadata->min_luminance.den = luma_den; - metadata->has_luminance = 1; - metadata->has_primaries = 1; - - av_log(avctx, AV_LOG_DEBUG, "Mastering Display Metadata:\n"); - av_log(avctx, AV_LOG_DEBUG, - "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f)\n", - av_q2d(metadata->display_primaries[0][0]), - av_q2d(metadata->display_primaries[0][1]), - av_q2d(metadata->display_primaries[1][0]), - av_q2d(metadata->display_primaries[1][1]), - av_q2d(metadata->display_primaries[2][0]), - av_q2d(metadata->display_primaries[2][1]), - av_q2d(metadata->white_point[0]), av_q2d(metadata->white_point[1])); - av_log(avctx, AV_LOG_DEBUG, - "min_luminance=%f, max_luminance=%f\n", - av_q2d(metadata->min_luminance), av_q2d(metadata->max_luminance)); } if (sei->content_light.present) { - AVContentLightMetadata *metadata = - av_content_light_metadata_create_side_data(frame); - if (!metadata) - return AVERROR(ENOMEM); - metadata->MaxCLL = sei->content_light.max_content_light_level; - metadata->MaxFALL = sei->content_light.max_pic_average_light_level; + AVContentLightMetadata *metadata; - av_log(avctx, AV_LOG_DEBUG, "Content Light Level Metadata:\n"); - av_log(avctx, AV_LOG_DEBUG, "MaxCLL=%d, MaxFALL=%d\n", - metadata->MaxCLL, metadata->MaxFALL); + ret = ff_decode_content_light_new(avctx, frame, &metadata); + if (ret < 0) + return ret; + + if (metadata) { + metadata->MaxCLL = sei->content_light.max_content_light_level; + metadata->MaxFALL = sei->content_light.max_pic_average_light_level; + + av_log(avctx, AV_LOG_DEBUG, "Content Light Level Metadata:\n"); + av_log(avctx, AV_LOG_DEBUG, "MaxCLL=%d, MaxFALL=%d\n", + metadata->MaxCLL, metadata->MaxFALL); + } } return 0; diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index f002c994c1..f9a92d10d3 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -507,33 +507,38 @@ FF_ENABLE_DEPRECATION_WARNINGS } if (p->mastering_display) { - AVMasteringDisplayMetadata *mastering = av_mastering_display_metadata_create_side_data(frame); - if (!mastering) { - res = AVERROR(ENOMEM); + AVMasteringDisplayMetadata *mastering; + + res = ff_decode_mastering_display_new(c, frame, &mastering); + if (res < 0) goto fail; + + if (mastering) { + for (int i = 0; i < 3; i++) { + mastering->display_primaries[i][0] = av_make_q(p->mastering_display->primaries[i][0], 1 << 16); + mastering->display_primaries[i][1] = av_make_q(p->mastering_display->primaries[i][1], 1 << 16); + } + mastering->white_point[0] = av_make_q(p->mastering_display->white_point[0], 1 << 16); + mastering->white_point[1] = av_make_q(p->mastering_display->white_point[1], 1 << 16); + + mastering->max_luminance = av_make_q(p->mastering_display->max_luminance, 1 << 8); + mastering->min_luminance = av_make_q(p->mastering_display->min_luminance, 1 << 14); + + mastering->has_primaries = 1; + mastering->has_luminance = 1; } - - for (int i = 0; i < 3; i++) { - mastering->display_primaries[i][0] = av_make_q(p->mastering_display->primaries[i][0], 1 << 16); - mastering->display_primaries[i][1] = av_make_q(p->mastering_display->primaries[i][1], 1 << 16); - } - mastering->white_point[0] = av_make_q(p->mastering_display->white_point[0], 1 << 16); - mastering->white_point[1] = av_make_q(p->mastering_display->white_point[1], 1 << 16); - - mastering->max_luminance = av_make_q(p->mastering_display->max_luminance, 1 << 8); - mastering->min_luminance = av_make_q(p->mastering_display->min_luminance, 1 << 14); - - mastering->has_primaries = 1; - mastering->has_luminance = 1; } if (p->content_light) { - AVContentLightMetadata *light = av_content_light_metadata_create_side_data(frame); - if (!light) { - res = AVERROR(ENOMEM); + AVContentLightMetadata *light; + + res = ff_decode_content_light_new(c, frame, &light); + if (res < 0) goto fail; + + if (light) { + light->MaxCLL = p->content_light->max_content_light_level; + light->MaxFALL = p->content_light->max_frame_average_light_level; } - light->MaxCLL = p->content_light->max_content_light_level; - light->MaxFALL = p->content_light->max_frame_average_light_level; } if (p->itut_t35) { #if FF_DAV1D_VERSION_AT_LEAST(6,9) diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 8f409c74b8..de50e6a5b6 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -746,33 +746,41 @@ static int populate_avctx_color_fields(AVCodecContext *avctx, AVFrame *frame) avctx->bits_per_raw_sample = s->significant_bits; if (s->have_clli) { - AVContentLightMetadata *clli = - av_content_light_metadata_create_side_data(frame); - if (!clli) - return AVERROR(ENOMEM); - /* - * 0.0001 divisor value - * see: https://www.w3.org/TR/png-3/#cLLi-chunk - */ - clli->MaxCLL = s->clli_max / 10000; - clli->MaxFALL = s->clli_avg / 10000; + AVContentLightMetadata *clli; + + ret = ff_decode_content_light_new(avctx, frame, &clli); + if (ret < 0) + return ret; + + if (clli) { + /* + * 0.0001 divisor value + * see: https://www.w3.org/TR/png-3/#cLLi-chunk + */ + clli->MaxCLL = s->clli_max / 10000; + clli->MaxFALL = s->clli_avg / 10000; + } } if (s->have_mdvc) { - AVMasteringDisplayMetadata *mdvc = - av_mastering_display_metadata_create_side_data(frame); - if (!mdvc) - return AVERROR(ENOMEM); - mdvc->has_primaries = 1; - for (int i = 0; i < 3; i++) { - mdvc->display_primaries[i][0] = av_make_q(s->mdvc_primaries[i][0], 50000); - mdvc->display_primaries[i][1] = av_make_q(s->mdvc_primaries[i][1], 50000); + AVMasteringDisplayMetadata *mdvc; + + ret = ff_decode_mastering_display_new(avctx, frame, &mdvc); + if (ret < 0) + return ret; + + if (mdvc) { + mdvc->has_primaries = 1; + for (int i = 0; i < 3; i++) { + mdvc->display_primaries[i][0] = av_make_q(s->mdvc_primaries[i][0], 50000); + mdvc->display_primaries[i][1] = av_make_q(s->mdvc_primaries[i][1], 50000); + } + mdvc->white_point[0] = av_make_q(s->mdvc_white_point[0], 50000); + mdvc->white_point[1] = av_make_q(s->mdvc_white_point[1], 50000); + mdvc->has_luminance = 1; + mdvc->max_luminance = av_make_q(s->mdvc_max_lum, 10000); + mdvc->min_luminance = av_make_q(s->mdvc_min_lum, 10000); } - mdvc->white_point[0] = av_make_q(s->mdvc_white_point[0], 50000); - mdvc->white_point[1] = av_make_q(s->mdvc_white_point[1], 50000); - mdvc->has_luminance = 1; - mdvc->max_luminance = av_make_q(s->mdvc_max_lum, 10000); - mdvc->min_luminance = av_make_q(s->mdvc_min_lum, 10000); } return 0; diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index d688a17c41..4f39f6942a 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -651,42 +651,50 @@ static int qsv_export_film_grain(AVCodecContext *avctx, mfxExtAV1FilmGrainParam static int qsv_export_hdr_side_data(AVCodecContext *avctx, mfxExtMasteringDisplayColourVolume *mdcv, mfxExtContentLightLevelInfo *clli, AVFrame *frame) { + int ret; + // The SDK re-uses this flag for HDR SEI parsing if (mdcv->InsertPayloadToggle) { - AVMasteringDisplayMetadata *mastering = av_mastering_display_metadata_create_side_data(frame); + AVMasteringDisplayMetadata *mastering; const int mapping[3] = {2, 0, 1}; const int chroma_den = 50000; const int luma_den = 10000; int i; - if (!mastering) - return AVERROR(ENOMEM); + ret = ff_decode_mastering_display_new(avctx, frame, &mastering); + if (ret < 0) + return ret; - for (i = 0; i < 3; i++) { - const int j = mapping[i]; - mastering->display_primaries[i][0] = av_make_q(mdcv->DisplayPrimariesX[j], chroma_den); - mastering->display_primaries[i][1] = av_make_q(mdcv->DisplayPrimariesY[j], chroma_den); + if (mastering) { + for (i = 0; i < 3; i++) { + const int j = mapping[i]; + mastering->display_primaries[i][0] = av_make_q(mdcv->DisplayPrimariesX[j], chroma_den); + mastering->display_primaries[i][1] = av_make_q(mdcv->DisplayPrimariesY[j], chroma_den); + } + + mastering->white_point[0] = av_make_q(mdcv->WhitePointX, chroma_den); + mastering->white_point[1] = av_make_q(mdcv->WhitePointY, chroma_den); + + mastering->max_luminance = av_make_q(mdcv->MaxDisplayMasteringLuminance, luma_den); + mastering->min_luminance = av_make_q(mdcv->MinDisplayMasteringLuminance, luma_den); + + mastering->has_luminance = 1; + mastering->has_primaries = 1; } - - mastering->white_point[0] = av_make_q(mdcv->WhitePointX, chroma_den); - mastering->white_point[1] = av_make_q(mdcv->WhitePointY, chroma_den); - - mastering->max_luminance = av_make_q(mdcv->MaxDisplayMasteringLuminance, luma_den); - mastering->min_luminance = av_make_q(mdcv->MinDisplayMasteringLuminance, luma_den); - - mastering->has_luminance = 1; - mastering->has_primaries = 1; } // The SDK re-uses this flag for HDR SEI parsing if (clli->InsertPayloadToggle) { - AVContentLightMetadata *light = av_content_light_metadata_create_side_data(frame); + AVContentLightMetadata *light; - if (!light) - return AVERROR(ENOMEM); + ret = ff_decode_content_light_new(avctx, frame, &light); + if (ret < 0) + return ret; - light->MaxCLL = clli->MaxContentLightLevel; - light->MaxFALL = clli->MaxPicAverageLightLevel; + if (light) { + light->MaxCLL = clli->MaxContentLightLevel; + light->MaxFALL = clli->MaxPicAverageLightLevel; + } } return 0; From patchwork Fri Feb 23 13:59:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 46487 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:26a3:b0:19e:cdac:8cce with SMTP id h35csp994750pze; Fri, 23 Feb 2024 06:36:05 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVpiPAB+hRqCwU0lYPptZ8zbX0oxM/y8IXl4nKukRuGWy4Qd4BVCia+ewuHH0JzTFIbWLOlwy/yJo91ANSmndof0Ml+IVLeHj1fDA== X-Google-Smtp-Source: AGHT+IFTMf4UqovaQK2FT9LE8FxMxj5t26qN+9Osnwz9WZ/mna1MEfwZgBvEmC5V09YzxxLXXmjb X-Received: by 2002:a17:906:c49:b0:a3e:4cb3:13d2 with SMTP id t9-20020a1709060c4900b00a3e4cb313d2mr1345373ejf.17.1708698964738; Fri, 23 Feb 2024 06:36:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708698964; cv=none; d=google.com; s=arc-20160816; b=OnnkJBoY2nrVJpk8emkJwFEwBvhZwM7J4VR6ndhz9W/Hk2JxB7ZM2yodLK9bUSoBoM RPr3DBVpDUzY7OnJg39epVjRgVoSC8z/gUh/91VYGqFrF5afNeCShH4bVIHGAUmbfSKg ueDmX3bvf2UBg6Hl7TJjnb2tOpIcoZv+PdC/5G5Vf2wi+sHoqB25tac+0pSxu2dGZ5dH VWA8ORuzatF8iVhCmDiqwYfz8JIauEozZOYcGYXn6gK/Fwn2O5cedl6Hyf3d4hYCoybB 5U8+Yj6AKeh/0RwxzP2tj7aw6zyAcqwknhvI/CdW2ybB96NntRsgNJGPgc+lWBT7UGj2 SupQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Q38yadNVmFTFbtqrC+JhmqWWkOARWyjSR9I1YCVJ1So=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=mOvbMk+qlcomnEh/DyKB1UN4ysZJDLbgckdZcQd5QdR6WPbLfheVGDBul8IGesXQAE ooWKRWdhkphz0pDN+3YKBdp8E+wTRI8GwrzrfLekr1L7lJo8RKRu5LWw+U0XZvOkaNXs RGDMqan3yv+Oc3tiRpkuI8N4FugFAZSqmtbEAETFx7zymCq9jjRm48m44HDt7waaGO0R ioZ8+8om2Qn5VB7oiMQqdM3nHXSqCgFowL7OSaIGTbdhSvrbYGTyLF7pvGHElVK80LhG OQJH1WITowsbeFXD7810fFhd0NHteBhrXkwU29VnaCqwMMPHzUqzY3wd8NtdygnQwEEP Wz7g==; 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=TYpOJa5+; 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 r18-20020a1709060d5200b00a3de10ea1c7si6139010ejh.68.2024.02.23.06.36.04; Fri, 23 Feb 2024 06:36:04 -0800 (PST) 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=TYpOJa5+; 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 60C1068CC0F; Fri, 23 Feb 2024 16:32:10 +0200 (EET) 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 32ACE68C6DE for ; Fri, 23 Feb 2024 16:31:36 +0200 (EET) 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=TYpOJa5+; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 85BBA4D4D for ; Fri, 23 Feb 2024 15:31:34 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id gmv5o3E1-U5B for ; Fri, 23 Feb 2024 15:31:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1708698688; bh=9p74uk0jUyw7jc0XsOnbNDz1r7FUWlA/h6Jb10KQ9Pg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=TYpOJa5++1PZ6a/DKM2CUotjJCxVbnsfFgNyB1+dh1Id2uGaNXqAwkDQE3Zyq3ofU A6tnnAH6+YVOj+cNJDogk8JC8DLZcP1Bod07Ymvf23Tf69YrIADS1GZoyFvm59oWpD +H3zfZcSGbuzOnCHUpt8w2k4YCYql/vlaNYx4MxCN9hva9Fl1LmMQ8xRg+GV0+gXNl TWYfbW0+zfO6JYJQlcY7efOqUXEC+AM5mYb6DjQRt/lMR7RZwxDDNvitABu0Uj7UHX +pJfORaPPthtSUX0oxtx8twYfMJLlyoncNb0TLbMcGa8ouSvQPTtk+ZnhZip4HW7m7 sSmB1hsEFU/AA== 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 48E804D68 for ; Fri, 23 Feb 2024 15:31:28 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 9B07E3A2767 for ; Fri, 23 Feb 2024 15:31:23 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Feb 2024 14:59:00 +0100 Message-ID: <20240223143115.16521-39-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240223143115.16521-1-anton@khirnov.net> References: <20240223143115.16521-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 38/38] tests/fate/matroska: add tests for side data preference 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: mNOxcIB9R4NX Cf. #10857 --- tests/fate/matroska.mak | 6 + tests/ref/fate/matroska-side-data-pref-codec | 255 ++++++++++++++++++ tests/ref/fate/matroska-side-data-pref-global | 255 ++++++++++++++++++ 3 files changed, 516 insertions(+) create mode 100644 tests/ref/fate/matroska-side-data-pref-codec create mode 100644 tests/ref/fate/matroska-side-data-pref-global diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 9ab747184a..e9433ce730 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -264,6 +264,12 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, VP9_PARSER) \ += fate-matroska-hdr10-plus-remux fate-matroska-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.webm matroska "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_packets" +fate-matroska-side-data-pref-codec: CMD = run ffprobe$(PROGSSUF)$(EXESUF) $(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv \ + -show_streams -show_frames -show_entries stream=stream_side_data:frame=frame_side_data_list +fate-matroska-side-data-pref-global: CMD = run ffprobe$(PROGSSUF)$(EXESUF) $(TARGET_SAMPLES)/mkv/hdr10tags-both.mkv \ + -show_streams -show_frames -show_entries stream=stream_side_data:frame=frame_side_data_list -side_data_prefer_global mastering_display_metadata,content_light_level +FATE_MATROSKA_FFPROBE-$(call ALLYES MATROSKA_DEMUXER HEVC_DECODER) += fate-matroska-side-data-pref-codec fate-matroska-side-data-pref-global + FATE_SAMPLES_AVCONV += $(FATE_MATROSKA-yes) FATE_SAMPLES_FFPROBE += $(FATE_MATROSKA_FFPROBE-yes) FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_MATROSKA_FFMPEG_FFPROBE-yes) diff --git a/tests/ref/fate/matroska-side-data-pref-codec b/tests/ref/fate/matroska-side-data-pref-codec new file mode 100644 index 0000000000..d27134d0c9 --- /dev/null +++ b/tests/ref/fate/matroska-side-data-pref-codec @@ -0,0 +1,255 @@ +[FRAME] +[SIDE_DATA] +side_data_type=H.26[45] User Data Unregistered SEI message +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=35400/50000 +red_y=14599/50000 +green_x=8500/50000 +green_y=39850/50000 +blue_x=6550/50000 +blue_y=2300/50000 +white_point_x=15634/50000 +white_point_y=16450/50000 +min_luminance=10/10000 +max_luminance=10000000/10000 +[/SIDE_DATA] +[/FRAME] +[STREAM] +DISPOSITION:default=1 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=0 +DISPOSITION:still_image=0 +TAG:BPS=216040 +TAG:BPS-eng=216040 +TAG:DURATION=00:00:00.400000000 +TAG:DURATION-eng=00:00:00.400000000 +TAG:NUMBER_OF_FRAMES=10 +TAG:NUMBER_OF_FRAMES-eng=10 +TAG:NUMBER_OF_BYTES=10802 +TAG:NUMBER_OF_BYTES-eng=10802 +TAG:_STATISTICS_WRITING_APP=mkvmerge v9.0.1 ('Mask Machine') 64bit +TAG:_STATISTICS_WRITING_APP-eng=mkvmerge v9.0.1 ('Mask Machine') 64bit +TAG:_STATISTICS_WRITING_DATE_UTC=2019-02-14 12:53:10 +TAG:_STATISTICS_WRITING_DATE_UTC-eng=2019-02-14 12:53:10 +TAG:_STATISTICS_TAGS=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES +TAG:_STATISTICS_TAGS-eng=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[/STREAM] diff --git a/tests/ref/fate/matroska-side-data-pref-global b/tests/ref/fate/matroska-side-data-pref-global new file mode 100644 index 0000000000..4ff0c2d9db --- /dev/null +++ b/tests/ref/fate/matroska-side-data-pref-global @@ -0,0 +1,255 @@ +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=H.26[45] User Data Unregistered SEI message +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[FRAME] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[/FRAME] +[STREAM] +DISPOSITION:default=1 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=0 +DISPOSITION:still_image=0 +TAG:BPS=216040 +TAG:BPS-eng=216040 +TAG:DURATION=00:00:00.400000000 +TAG:DURATION-eng=00:00:00.400000000 +TAG:NUMBER_OF_FRAMES=10 +TAG:NUMBER_OF_FRAMES-eng=10 +TAG:NUMBER_OF_BYTES=10802 +TAG:NUMBER_OF_BYTES-eng=10802 +TAG:_STATISTICS_WRITING_APP=mkvmerge v9.0.1 ('Mask Machine') 64bit +TAG:_STATISTICS_WRITING_APP-eng=mkvmerge v9.0.1 ('Mask Machine') 64bit +TAG:_STATISTICS_WRITING_DATE_UTC=2019-02-14 12:53:10 +TAG:_STATISTICS_WRITING_DATE_UTC-eng=2019-02-14 12:53:10 +TAG:_STATISTICS_TAGS=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES +TAG:_STATISTICS_TAGS-eng=BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES +[SIDE_DATA] +side_data_type=Content light level metadata +max_content=1000 +max_average=300 +[/SIDE_DATA] +[SIDE_DATA] +side_data_type=Mastering display metadata +red_x=11408507/16777216 +red_y=5368709/16777216 +green_x=2222981/8388608 +green_y=11576279/16777216 +blue_x=5033165/33554432 +blue_y=16106127/268435456 +white_point_x=10492471/33554432 +white_point_y=689963/2097152 +min_luminance=5368709/536870912 +max_luminance=1000/1 +[/SIDE_DATA] +[/STREAM]