[FFmpeg-cvslog] avcodec/aacdec_template: Deduplicate AVClass+AVOptions

Andreas Rheinhardt git at videolan.org
Tue Apr 23 09:58:15 EEST 2024


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Mar  1 01:00:08 2024 +0100| [980a55fb46771241ea379929da09d9cfe67280f6] | committer: Lynne

avcodec/aacdec_template: Deduplicate AVClass+AVOptions

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=980a55fb46771241ea379929da09d9cfe67280f6
---

 libavcodec/aac/aacdec.c      | 39 +++++++++++++++++++++++++++++++++++++++
 libavcodec/aacdec.c          |  4 +---
 libavcodec/aacdec.h          |  2 ++
 libavcodec/aacdec_fixed.c    |  3 +--
 libavcodec/aacdec_template.c | 32 --------------------------------
 5 files changed, 43 insertions(+), 37 deletions(-)

diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c
index 021f94e1e5..4095509d16 100644
--- a/libavcodec/aac/aacdec.c
+++ b/libavcodec/aac/aacdec.c
@@ -29,13 +29,19 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <limits.h>
+#include <stddef.h>
+
 #include "libavcodec/aacsbr.h"
 #include "libavcodec/aacdec.h"
 #include "libavcodec/avcodec.h"
 #include "libavutil/attributes.h"
+#include "libavutil/log.h"
 #include "libavutil/macros.h"
 #include "libavutil/mem.h"
+#include "libavutil/opt.h"
 #include "libavutil/tx.h"
+#include "libavutil/version.h"
 
 av_cold int ff_aac_decode_close(AVCodecContext *avctx)
 {
@@ -69,3 +75,36 @@ av_cold int ff_aac_decode_close(AVCodecContext *avctx)
 
     return 0;
 }
+
+#define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
+#define OFF(field) offsetof(AACDecContext, field)
+static const AVOption options[] = {
+    /**
+     * AVOptions for Japanese DTV specific extensions (ADTS only)
+     */
+    {"dual_mono_mode", "Select the channel to decode for dual mono",
+     OFF(force_dmono_mode), AV_OPT_TYPE_INT, {.i64=-1}, -1, 2,
+     AACDEC_FLAGS, .unit = "dual_mono_mode"},
+
+    {"auto", "autoselection",            0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
+    {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
+    {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
+    {"both", "Select both channels",     0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
+
+    { "channel_order", "Order in which the channels are to be exported",
+        OFF(output_channel_order), AV_OPT_TYPE_INT,
+        { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, .unit = "channel_order" },
+      { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST,
+        { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
+      { "coded",    "order in which the channels are coded in the bitstream",
+        0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
+
+    {NULL},
+};
+
+const AVClass ff_aac_decoder_class = {
+    .class_name = "AAC decoder",
+    .item_name  = av_default_item_name,
+    .option     = options,
+    .version    = LIBAVUTIL_VERSION_INT,
+};
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index 7db17ffbb1..86b9161e64 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -36,8 +36,6 @@
 #define TX_TYPE AV_TX_FLOAT_MDCT
 
 #include "libavutil/float_dsp.h"
-#include "libavutil/mem.h"
-#include "libavutil/opt.h"
 #include "avcodec.h"
 #include "codec_internal.h"
 #include "get_bits.h"
@@ -555,6 +553,7 @@ const FFCodec ff_aac_decoder = {
     CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
     .p.type          = AVMEDIA_TYPE_AUDIO,
     .p.id            = AV_CODEC_ID_AAC,
+    .p.priv_class    = &ff_aac_decoder_class,
     .priv_data_size  = sizeof(AACDecContext),
     .init            = aac_decode_init,
     .close           = ff_aac_decode_close,
@@ -566,7 +565,6 @@ const FFCodec ff_aac_decoder = {
     .caps_internal   = FF_CODEC_CAP_INIT_CLEANUP,
     .p.ch_layouts    = ff_aac_ch_layout,
     .flush = flush,
-    .p.priv_class    = &aac_decoder_class,
     .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
 };
 
diff --git a/libavcodec/aacdec.h b/libavcodec/aacdec.h
index cb9d1637b3..b05e68f51c 100644
--- a/libavcodec/aacdec.h
+++ b/libavcodec/aacdec.h
@@ -304,6 +304,8 @@ typedef struct AACDecContext {
 #define fdsp          RENAME_FIXED(fdsp)
 #endif
 
+extern const struct AVClass ff_aac_decoder_class;
+
 int ff_aac_decode_close(struct AVCodecContext *avctx);
 
 void ff_aacdec_init_mips(AACDecContext *c);
diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c
index 4a5f678bca..8ed98226e9 100644
--- a/libavcodec/aacdec_fixed.c
+++ b/libavcodec/aacdec_fixed.c
@@ -62,7 +62,6 @@
 #define TX_TYPE AV_TX_INT32_MDCT
 
 #include "libavutil/fixed_dsp.h"
-#include "libavutil/opt.h"
 #include "avcodec.h"
 #include "codec_internal.h"
 #include "get_bits.h"
@@ -498,6 +497,7 @@ const FFCodec ff_aac_fixed_decoder = {
     CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
     .p.type          = AVMEDIA_TYPE_AUDIO,
     .p.id            = AV_CODEC_ID_AAC,
+    .p.priv_class    = &ff_aac_decoder_class,
     .priv_data_size  = sizeof(AACDecContext),
     .init            = aac_decode_init,
     .close           = ff_aac_decode_close,
@@ -508,7 +508,6 @@ const FFCodec ff_aac_fixed_decoder = {
     .p.capabilities  = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
     .caps_internal   = FF_CODEC_CAP_INIT_CLEANUP,
     .p.ch_layouts    = ff_aac_ch_layout,
-    .p.priv_class    = &aac_decoder_class,
     .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
     .flush = flush,
 };
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index adcd51436c..27cf5dc4ec 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -3401,35 +3401,3 @@ static void aacdec_init(AACDecContext *c)
 #endif
 #endif /* !USE_FIXED */
 }
-/**
- * AVOptions for Japanese DTV specific extensions (ADTS only)
- */
-#define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
-#define OFF(field) offsetof(AACDecContext, field)
-static const AVOption options[] = {
-    {"dual_mono_mode", "Select the channel to decode for dual mono",
-     OFF(force_dmono_mode), AV_OPT_TYPE_INT, {.i64=-1}, -1, 2,
-     AACDEC_FLAGS, .unit = "dual_mono_mode"},
-
-    {"auto", "autoselection",            0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
-    {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
-    {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
-    {"both", "Select both channels",     0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"},
-
-    { "channel_order", "Order in which the channels are to be exported",
-        OFF(output_channel_order), AV_OPT_TYPE_INT,
-        { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, .unit = "channel_order" },
-      { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST,
-        { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
-      { "coded",    "order in which the channels are coded in the bitstream",
-        0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, .unit = "channel_order" },
-
-    {NULL},
-};
-
-static const AVClass aac_decoder_class = {
-    .class_name = "AAC decoder",
-    .item_name  = av_default_item_name,
-    .option     = options,
-    .version    = LIBAVUTIL_VERSION_INT,
-};



More information about the ffmpeg-cvslog mailing list