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


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to