From patchwork Fri Nov 12 16:32:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 31393 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp2052825iob; Fri, 12 Nov 2021 08:33:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJzFDFQXBmoHFE/5ZNPeHT1zwtzJW/SOETc/5mjJJXzw3hpWj58x1tOgpHA69gm4fwbM5lmU X-Received: by 2002:a17:906:5641:: with SMTP id v1mr20407461ejr.357.1636734813384; Fri, 12 Nov 2021 08:33:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636734813; cv=none; d=google.com; s=arc-20160816; b=ngRzeapYyHB7H5/HD8rgpkaA4KrRNUq7xl8OXn7bzyhinRqVyW6mY8PZVg9NIKael0 sCRX9+6aOxP5UM15VdIwnTwMlLIxXlQr12cAwBpvI59cXfJYhF1PqBIAT0rzc2VyrU5Q ovBHpAXMJNElYuiiwoCQXR1RsPBMaVJYLdGO8BpV9TY4bhhODZOuteg+R1VILE2pZ16n PcjtkZ0Im+09XYv5HU+YWSlQ8yagjCb6rNaHfCO1BB5r1V/9oJNSIkaZZnP2yWGNAgc4 cK0MlWLGhM6g5EpjrY1M+TtS0da77XuAVchqrY6UHmxwT5+OHMMOKU9EHx7LVHpinExq AQng== 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:delivered-to; bh=jCHhDsvR2UGJ5SZ6mEyTYpWBh7pxZPUzyQZNVYhSaX4=; b=npoPsa6ImuBCfSFcMs6/PCHzBk3X/oUyd9bHFUuSfAPfZ7wy0jyp40zCo8l5Qeunb2 9K1xlRBFJGSeiIGnWhdNFmWFJp21bo49fm3U469Qv0rp5cIdVTmBK5o1Z+N+oA/+IYfJ WZ9MhyLMpo9Ar5g+QVatms30c8rsGEfLk9UVf3g7rntG9duQShRS4KrN2o41g2PqMldp pw2LDj8QH/Y1BwJkR2rlI3QgyKALMdA98sC1VWuBK9C7XHfzcjtXyegAldUMEGRNfyCX DsA1vS2X61A5SaURe19/ZHbDpSg52AZG2Df5G0NZzCilJA/xHDDgVxullUMTk8QG4Lqy hiiQ== ARC-Authentication-Results: i=1; mx.google.com; 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 ji3si16770099ejc.690.2021.11.12.08.33.32; Fri, 12 Nov 2021 08: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; 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 A864468AE41; Fri, 12 Nov 2021 18:33:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DCAF068A1A7 for ; Fri, 12 Nov 2021 18:33:00 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 6E496240179 for ; Fri, 12 Nov 2021 17:33:00 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id C_Hx4Wgt411I for ; Fri, 12 Nov 2021 17:32:58 +0100 (CET) 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 mail0.khirnov.net (Postfix) with ESMTPS id E9B56240176 for ; Fri, 12 Nov 2021 17:32:58 +0100 (CET) Received: by libav.khirnov.net (Postfix, from userid 1000) id F14823A03FD; Fri, 12 Nov 2021 17:32:58 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Nov 2021 17:32:51 +0100 Message-Id: <20211112163255.20522-2-anton@khirnov.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211112163255.20522-1-anton@khirnov.net> References: <20211112163255.20522-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] lavf: add an AVClass to AVStream on next major bump 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: GVOuJZJsdYOA Also add a function to retrieve that class, analogously to avformat_get_class(). This will be useful for adding an AVOption for dispositions. --- doc/APIchanges | 4 ++++ libavformat/avformat.h | 15 +++++++++++++++ libavformat/utils.c | 15 +++++++++++++++ libavformat/version.h | 3 ++- 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 10bad1d21e..a86f4b936e 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,10 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-11-xx - xxxxxxxxxx - lavf 59.9.100 - avformat.h + Add av_stream_get_class(). Schedule adding AVStream.av_class at libavformat + major version 60. + 2021-11-12 - xxxxxxxxxx - lavu 57.8.100 - hwcontext_vulkan.h Added AVFrame.sem_value, AVVulkanDeviceContext.queue_family_encode_index, nb_encode_queues, queue_family_decode_index, and nb_decode_queues. diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 7d8ad08f07..4dabc90f24 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -909,6 +909,13 @@ typedef struct AVIndexEntry { * sizeof(AVStream) must not be used outside libav*. */ typedef struct AVStream { +#if FF_API_AVSTREAM_CLASS + /** + * A class for @ref avoptions. Set on stream creation. + */ + const AVClass *av_class; +#endif + int index; /**< stream index in AVFormatContext */ /** * Format-specific stream ID. @@ -1864,6 +1871,14 @@ void avformat_free_context(AVFormatContext *s); */ const AVClass *avformat_get_class(void); +/** + * Get the AVClass for AVStream. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + */ +const AVClass *av_stream_get_class(void); + /** * Add a new stream to a media file. * diff --git a/libavformat/utils.c b/libavformat/utils.c index 509c0ecdce..d889134a1a 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -721,6 +721,17 @@ void avformat_free_context(AVFormatContext *s) av_free(s); } +static const AVClass stream_class = { + .class_name = "AVStream", + .item_name = av_default_item_name, + .version = LIBAVUTIL_VERSION_INT, +}; + +const AVClass *av_stream_get_class(void) +{ + return &stream_class; +} + AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) { FFFormatContext *const si = ffformatcontext(s); @@ -745,6 +756,10 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) return NULL; st = &sti->pub; +#if FF_API_AVSTREAM_CLASS + st->av_class = &stream_class; +#endif + st->codecpar = avcodec_parameters_alloc(); if (!st->codecpar) goto fail; diff --git a/libavformat/version.h b/libavformat/version.h index 2e860b8d76..1d10481734 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 59 -#define LIBAVFORMAT_VERSION_MINOR 8 +#define LIBAVFORMAT_VERSION_MINOR 9 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ @@ -58,6 +58,7 @@ #define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_API_AVIOCONTEXT_WRITTEN (LIBAVFORMAT_VERSION_MAJOR < 60) +#define FF_API_AVSTREAM_CLASS (LIBAVFORMAT_VERSION_MAJOR > 59) #define FF_API_R_FRAME_RATE 1