Commit 6f4d952e60 for ffmpeg

commit 6f4d952e6053693ce27621817c67e71935166f6a
Author: James Almer <jamrial@gmail.com>
Date:   Thu Oct 1 17:03:53 2026 -0300

    avcodec: allow adding AVOption enabled but non-public fields to AVCodecContext

    Making AVCodecInternal fields AVOption enabled requires extra considerations
    in av_codec_context_class, and they will only be settable with an open context
    or by passing the options directly as part of avcodec_open2().
    They also would require to allow searching children classes, which in the case
    of a fake object results in looking at every single underlying decoder/encoder
    option.
    Instead of that, extend AVCodecContext internally the same way we did for other
    contexts like AVFormatContext, and add fields outside the public part.

    Signed-off-by: James Almer <jamrial@gmail.com>

diff --git a/libavcodec/avcodec_internal.h b/libavcodec/avcodec_internal.h
index 06645e91a0..ebd9458120 100644
--- a/libavcodec/avcodec_internal.h
+++ b/libavcodec/avcodec_internal.h
@@ -27,9 +27,20 @@

 #include "libavutil/frame.h"

+#include "avcodec.h"
 #include "packet.h"

-struct AVCodecContext;
+typedef struct FFCodecContext {
+    /**
+     * The public context.
+     */
+    AVCodecContext pub;
+} FFCodecContext;
+
+static av_always_inline FFCodecContext *ffcodeccontext(AVCodecContext *avctx)
+{
+    return (FFCodecContext*)avctx;
+}

 typedef struct SideDataMap {
     enum AVPacketSideDataType packet;
diff --git a/libavcodec/options.c b/libavcodec/options.c
index 834beb5757..d85137a99e 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -148,11 +148,15 @@ static int init_context_defaults(AVCodecContext *s, const AVCodec *codec)

 AVCodecContext *avcodec_alloc_context3(const AVCodec *codec)
 {
-    AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext));
+    FFCodecContext *ffavc;
+    AVCodecContext *avctx;

-    if (!avctx)
+    ffavc = av_mallocz(sizeof(*ffavc));
+    if (!ffavc)
         return NULL;

+    avctx = &ffavc->pub;
+
     if (init_context_defaults(avctx, codec) < 0) {
         av_free(avctx);
         return NULL;