[FFmpeg-devel] [PATCH 2/6] lavf: add an AVClass to AVStream on next major bump

James Almer jamrial at gmail.com
Fri Nov 12 18:36:58 EET 2021


On 11/12/2021 1:32 PM, Anton Khirnov wrote:
> Also add a function to retrieve that class, analogously to
> avformat_get_class().
> 
> This will be useful for adding an AVOption for dispositions.

While it's true that quite a few months have passed since the bump, we 
haven't made a release just yet that would effectively freeze in practice.
If this change brings some immediate benefits, we could consider just 
adding it now instead.

> ---
>   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
> 



More information about the ffmpeg-devel mailing list