PR #24131 opened by mkver
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24131
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24131.patch

Also test the new stuff in avcodec/tests/avcodec.c.


>From bbbd4a27203d900da87cfb78a5e078289e1021cf Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Thu, 13 Aug 2026 18:23:25 +0200
Subject: [PATCH 1/3] avcodec/tests/avcodec: Test reconf callback, flags

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/tests/avcodec.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c
index c9afec4eb6..3c0809c489 100644
--- a/libavcodec/tests/avcodec.c
+++ b/libavcodec/tests/avcodec.c
@@ -174,6 +174,8 @@ int main(void){
                 ERR("Encoder %s is both subtitle encoder and not subtitle 
encoder.");
             if (codec2->update_thread_context || 
codec2->update_thread_context_for_user || codec2->bsfs)
                 ERR("Encoder %s has decoder-only thread functions or bsf.\n");
+            if (codec2->reconf && !(codec->capabilities & AV_CODEC_CAP_RECONF))
+                ERR("Encoder %s has reconf callback without supporting 
recondiguration.\n");
             if (codec->type == AVMEDIA_TYPE_AUDIO) {
                 if (!codec2->sample_fmts) {
                     av_log(NULL, AV_LOG_FATAL, "Encoder %s is missing the 
sample_fmts field\n", codec->name);
@@ -216,7 +218,9 @@ int main(void){
             if (codec->capabilities & (AV_CODEC_CAP_SMALL_LAST_FRAME    |
                                        AV_CODEC_CAP_VARIABLE_FRAME_SIZE |
                                        AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE |
-                                       AV_CODEC_CAP_ENCODER_FLUSH))
+                                       AV_CODEC_CAP_ENCODER_FLUSH            |
+                                       AV_CODEC_CAP_RECONF                   |
+                                       AV_CODEC_CAP_ENCODER_RECON_FRAME))
                 ERR("Decoder %s has encoder-only capabilities\n");
             if (codec2->cb_type != FF_CODEC_CB_TYPE_DECODE &&
                 codec2->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)
-- 
2.52.0


>From 3393f06db2a1f5bcef40b17d84c0b36f940ba454 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Thu, 13 Aug 2026 18:27:16 +0200
Subject: [PATCH 2/3] avcodec/codec_internal: Put bsfs and reconf in a union

Reduces sizeof(FFCodec)

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/codec_internal.h | 22 ++++++++++++----------
 libavcodec/tests/avcodec.c  |  2 +-
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h
index 6422c9996b..7b7bde7cae 100644
--- a/libavcodec/codec_internal.h
+++ b/libavcodec/codec_internal.h
@@ -256,17 +256,19 @@ typedef struct FFCodec {
      */
     void (*flush)(struct AVCodecContext *);
 
-    /**
-     * Reconfigure the encoder
-     * Called by avcodec_encode_reconfigure()
-     */
-    int (*reconf)(struct AVCodecContext *avctx, struct AVDictionary **dict);
+    union {
+        /**
+        * Encoding only. Reconfigure the encoder
+        * Called by avcodec_encode_reconfigure()
+        */
+        int (*reconf)(struct AVCodecContext *avctx, struct AVDictionary 
**dict);
 
-    /**
-     * Decoding only, a comma-separated list of bitstream filters to apply to
-     * packets before decoding.
-     */
-    const char *bsfs;
+        /**
+        * Decoding only, a comma-separated list of bitstream filters to apply 
to
+        * packets before decoding.
+        */
+        const char *bsfs;
+    };
 
     /**
      * Array of pointers to hardware configurations supported by the codec,
diff --git a/libavcodec/tests/avcodec.c b/libavcodec/tests/avcodec.c
index 3c0809c489..8c873e6fcb 100644
--- a/libavcodec/tests/avcodec.c
+++ b/libavcodec/tests/avcodec.c
@@ -172,7 +172,7 @@ int main(void){
         if (is_encoder) {
             if ((codec->type == AVMEDIA_TYPE_SUBTITLE) != (codec2->cb_type == 
FF_CODEC_CB_TYPE_ENCODE_SUB))
                 ERR("Encoder %s is both subtitle encoder and not subtitle 
encoder.");
-            if (codec2->update_thread_context || 
codec2->update_thread_context_for_user || codec2->bsfs)
+            if (codec2->update_thread_context || 
codec2->update_thread_context_for_user)
                 ERR("Encoder %s has decoder-only thread functions or bsf.\n");
             if (codec2->reconf && !(codec->capabilities & AV_CODEC_CAP_RECONF))
                 ERR("Encoder %s has reconf callback without supporting 
recondiguration.\n");
-- 
2.52.0


>From c38bea8b580a836171e39566b6537c9ce6b7205c Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Thu, 13 Aug 2026 18:33:08 +0200
Subject: [PATCH 3/3] avcodec/encode: Remove pointless opt.h inclusion

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/encode.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/libavcodec/encode.h b/libavcodec/encode.h
index 0a9998062a..8cf24558f5 100644
--- a/libavcodec/encode.h
+++ b/libavcodec/encode.h
@@ -21,7 +21,6 @@
 #ifndef AVCODEC_ENCODE_H
 #define AVCODEC_ENCODE_H
 
-#include "libavutil/opt.h"
 #include "libavutil/dict.h"
 #include "libavutil/frame.h"
 
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to