[FFmpeg-devel] [PATCH 2/8] avocdec/aac: Move decoder-only stuff to new header aacdec.h
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Mon Feb 26 03:26:50 EET 2024
AACContext is not used by the encoder at all.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
libavcodec/aac.h | 143 ---------------------------
libavcodec/aacdec.c | 1 +
libavcodec/aacdec.h | 179 ++++++++++++++++++++++++++++++++++
libavcodec/aacdec_fixed.c | 1 +
libavcodec/aacsbr_template.c | 2 +
libavcodec/mips/aacdec_mips.c | 2 +-
libavcodec/mips/aacdec_mips.h | 2 +-
libavcodec/mips/aacsbr_mips.c | 2 +-
libavcodec/mips/aacsbr_mips.h | 2 +-
9 files changed, 187 insertions(+), 147 deletions(-)
create mode 100644 libavcodec/aacdec.h
diff --git a/libavcodec/aac.h b/libavcodec/aac.h
index 285d3b7482..da683b0071 100644
--- a/libavcodec/aac.h
+++ b/libavcodec/aac.h
@@ -33,12 +33,7 @@
#include "aac_defines.h"
#include "libavutil/channel_layout.h"
-#include "libavutil/float_dsp.h"
-#include "libavutil/fixed_dsp.h"
#include "libavutil/mem_internal.h"
-#include "libavutil/tx.h"
-#include "avcodec.h"
-#include "mpeg4audio.h"
#include "sbr.h"
#include <stdint.h>
@@ -108,25 +103,6 @@ enum CouplingPoint {
AFTER_IMDCT = 3,
};
-/**
- * Output configuration status
- */
-enum OCStatus {
- OC_NONE, ///< Output unconfigured
- OC_TRIAL_PCE, ///< Output configuration under trial specified by an inband PCE
- OC_TRIAL_FRAME, ///< Output configuration under trial specified by a frame header
- OC_GLOBAL_HDR, ///< Output configuration set in a global header but not yet locked
- OC_LOCKED, ///< Output configuration locked in place
-};
-
-typedef struct OutputConfiguration {
- MPEG4AudioConfig m4ac;
- uint8_t layout_map[MAX_ELEM_ID*4][3];
- int layout_map_tags;
- AVChannelLayout ch_layout;
- enum OCStatus status;
-} OutputConfiguration;
-
/**
* Predictor State
*/
@@ -203,22 +179,6 @@ typedef struct TemporalNoiseShaping {
INTFLOAT coef[8][4][TNS_MAX_ORDER];
} TemporalNoiseShaping;
-/**
- * Dynamic Range Control - decoded from the bitstream but not processed further.
- */
-typedef struct DynamicRangeControl {
- int pce_instance_tag; ///< Indicates with which program the DRC info is associated.
- int dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative
- int dyn_rng_ctl[17]; ///< DRC magnitude information
- int exclude_mask[MAX_CHANNELS]; ///< Channels to be excluded from DRC processing.
- int band_incr; ///< Number of DRC bands greater than 1 having DRC info.
- int interpolation_scheme; ///< Indicates the interpolation scheme used in the SBR QMF domain.
- int band_top[17]; ///< Indicates the top of the i-th DRC band in units of 4 spectral lines.
- int prog_ref_level; /**< A reference level for the long-term program audio level for all
- * channels combined.
- */
-} DynamicRangeControl;
-
typedef struct Pulse {
int num_pulse;
int start;
@@ -285,107 +245,4 @@ typedef struct ChannelElement {
SpectralBandReplication sbr;
} ChannelElement;
-enum AACOutputChannelOrder {
- CHANNEL_ORDER_DEFAULT,
- CHANNEL_ORDER_CODED,
-};
-
-/**
- * main AAC context
- */
-struct AACContext {
- AVClass *class;
- AVCodecContext *avctx;
- AVFrame *frame;
-
- int is_saved; ///< Set if elements have stored overlap from previous frame.
- DynamicRangeControl che_drc;
-
- /**
- * @name Channel element related data
- * @{
- */
- ChannelElement *che[4][MAX_ELEM_ID];
- ChannelElement *tag_che_map[4][MAX_ELEM_ID];
- int tags_mapped;
- int warned_remapping_once;
- /** @} */
-
- /**
- * @name temporary aligned temporary buffers
- * (We do not want to have these on the stack.)
- * @{
- */
- DECLARE_ALIGNED(32, INTFLOAT, buf_mdct)[1024];
- /** @} */
-
- /**
- * @name Computed / set up during initialization
- * @{
- */
- AVTXContext *mdct120;
- AVTXContext *mdct128;
- AVTXContext *mdct480;
- AVTXContext *mdct512;
- AVTXContext *mdct960;
- AVTXContext *mdct1024;
- AVTXContext *mdct_ltp;
-
- av_tx_fn mdct120_fn;
- av_tx_fn mdct128_fn;
- av_tx_fn mdct480_fn;
- av_tx_fn mdct512_fn;
- av_tx_fn mdct960_fn;
- av_tx_fn mdct1024_fn;
- av_tx_fn mdct_ltp_fn;
-#if USE_FIXED
- AVFixedDSPContext *fdsp;
-#else
- AVFloatDSPContext *fdsp;
-#endif /* USE_FIXED */
- int random_state;
- /** @} */
-
- /**
- * @name Members used for output
- * @{
- */
- SingleChannelElement *output_element[MAX_CHANNELS]; ///< Points to each SingleChannelElement
- /** @} */
-
-
- /**
- * @name Japanese DTV specific extension
- * @{
- */
- int force_dmono_mode;///< 0->not dmono, 1->use first channel, 2->use second channel
- int dmono_mode; ///< 0->not dmono, 1->use first channel, 2->use second channel
- /** @} */
-
- enum AACOutputChannelOrder output_channel_order;
-
- DECLARE_ALIGNED(32, INTFLOAT, temp)[128];
-
- OutputConfiguration oc[2];
- int warned_num_aac_frames;
- int warned_960_sbr;
- unsigned warned_71_wide;
- int warned_gain_control;
- int warned_he_aac_mono;
-
- /* aacdec functions pointers */
- void (*imdct_and_windowing)(AACContext *ac, SingleChannelElement *sce);
- void (*apply_ltp)(AACContext *ac, SingleChannelElement *sce);
- void (*apply_tns)(INTFLOAT coef[1024], TemporalNoiseShaping *tns,
- IndividualChannelStream *ics, int decode);
- void (*windowing_and_mdct_ltp)(AACContext *ac, INTFLOAT *out,
- INTFLOAT *in, IndividualChannelStream *ics);
- void (*update_ltp)(AACContext *ac, SingleChannelElement *sce);
- void (*vector_pow43)(int *coefs, int len);
- void (*subband_scale)(int *dst, int *src, int scale, int offset, int len, void *log_context);
-
-};
-
-void ff_aacdec_init_mips(AACContext *c);
-
#endif /* AVCODEC_AAC_H */
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index d66ebf4a7c..962b1705c6 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -45,6 +45,7 @@
#include "sinewin.h"
#include "aac.h"
+#include "aacdec.h"
#include "aactab.h"
#include "aacdectab.h"
#include "adts_header.h"
diff --git a/libavcodec/aacdec.h b/libavcodec/aacdec.h
new file mode 100644
index 0000000000..c4ac63e2fb
--- /dev/null
+++ b/libavcodec/aacdec.h
@@ -0,0 +1,179 @@
+/*
+ * AAC decoder definitions and structures
+ * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
+ * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * AAC decoder definitions and structures
+ * @author Oded Shimon ( ods15 ods15 dyndns org )
+ * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
+ */
+
+#ifndef AVCODEC_AACDEC_H
+#define AVCODEC_AACDEC_H
+
+#include "libavutil/float_dsp.h"
+#include "libavutil/fixed_dsp.h"
+#include "libavutil/mem_internal.h"
+#include "libavutil/tx.h"
+
+#include "aac.h"
+#include "mpeg4audio.h"
+
+/**
+ * Output configuration status
+ */
+enum OCStatus {
+ OC_NONE, ///< Output unconfigured
+ OC_TRIAL_PCE, ///< Output configuration under trial specified by an inband PCE
+ OC_TRIAL_FRAME, ///< Output configuration under trial specified by a frame header
+ OC_GLOBAL_HDR, ///< Output configuration set in a global header but not yet locked
+ OC_LOCKED, ///< Output configuration locked in place
+};
+
+enum AACOutputChannelOrder {
+ CHANNEL_ORDER_DEFAULT,
+ CHANNEL_ORDER_CODED,
+};
+
+typedef struct OutputConfiguration {
+ MPEG4AudioConfig m4ac;
+ uint8_t layout_map[MAX_ELEM_ID*4][3];
+ int layout_map_tags;
+ AVChannelLayout ch_layout;
+ enum OCStatus status;
+} OutputConfiguration;
+
+/**
+ * Dynamic Range Control - decoded from the bitstream but not processed further.
+ */
+typedef struct DynamicRangeControl {
+ int pce_instance_tag; ///< Indicates with which program the DRC info is associated.
+ int dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative
+ int dyn_rng_ctl[17]; ///< DRC magnitude information
+ int exclude_mask[MAX_CHANNELS]; ///< Channels to be excluded from DRC processing.
+ int band_incr; ///< Number of DRC bands greater than 1 having DRC info.
+ int interpolation_scheme; ///< Indicates the interpolation scheme used in the SBR QMF domain.
+ int band_top[17]; ///< Indicates the top of the i-th DRC band in units of 4 spectral lines.
+ int prog_ref_level; /**< A reference level for the long-term program audio level for all
+ * channels combined.
+ */
+} DynamicRangeControl;
+
+/**
+ * main AAC decoding context
+ */
+struct AACContext {
+ const struct AVClass *class;
+ struct AVCodecContext *avctx;
+ struct AVFrame *frame;
+
+ int is_saved; ///< Set if elements have stored overlap from previous frame.
+ DynamicRangeControl che_drc;
+
+ /**
+ * @name Channel element related data
+ * @{
+ */
+ ChannelElement *che[4][MAX_ELEM_ID];
+ ChannelElement *tag_che_map[4][MAX_ELEM_ID];
+ int tags_mapped;
+ int warned_remapping_once;
+ /** @} */
+
+ /**
+ * @name temporary aligned temporary buffers
+ * (We do not want to have these on the stack.)
+ * @{
+ */
+ DECLARE_ALIGNED(32, INTFLOAT, buf_mdct)[1024];
+ /** @} */
+
+ /**
+ * @name Computed / set up during initialization
+ * @{
+ */
+ AVTXContext *mdct120;
+ AVTXContext *mdct128;
+ AVTXContext *mdct480;
+ AVTXContext *mdct512;
+ AVTXContext *mdct960;
+ AVTXContext *mdct1024;
+ AVTXContext *mdct_ltp;
+
+ av_tx_fn mdct120_fn;
+ av_tx_fn mdct128_fn;
+ av_tx_fn mdct480_fn;
+ av_tx_fn mdct512_fn;
+ av_tx_fn mdct960_fn;
+ av_tx_fn mdct1024_fn;
+ av_tx_fn mdct_ltp_fn;
+#if USE_FIXED
+ AVFixedDSPContext *fdsp;
+#else
+ AVFloatDSPContext *fdsp;
+#endif /* USE_FIXED */
+ int random_state;
+ /** @} */
+
+ /**
+ * @name Members used for output
+ * @{
+ */
+ SingleChannelElement *output_element[MAX_CHANNELS]; ///< Points to each SingleChannelElement
+ /** @} */
+
+
+ /**
+ * @name Japanese DTV specific extension
+ * @{
+ */
+ int force_dmono_mode;///< 0->not dmono, 1->use first channel, 2->use second channel
+ int dmono_mode; ///< 0->not dmono, 1->use first channel, 2->use second channel
+ /** @} */
+
+ enum AACOutputChannelOrder output_channel_order;
+
+ DECLARE_ALIGNED(32, INTFLOAT, temp)[128];
+
+ OutputConfiguration oc[2];
+ int warned_num_aac_frames;
+ int warned_960_sbr;
+ unsigned warned_71_wide;
+ int warned_gain_control;
+ int warned_he_aac_mono;
+
+ /* aacdec functions pointers */
+ void (*imdct_and_windowing)(AACContext *ac, SingleChannelElement *sce);
+ void (*apply_ltp)(AACContext *ac, SingleChannelElement *sce);
+ void (*apply_tns)(INTFLOAT coef[1024], TemporalNoiseShaping *tns,
+ IndividualChannelStream *ics, int decode);
+ void (*windowing_and_mdct_ltp)(AACContext *ac, INTFLOAT *out,
+ INTFLOAT *in, IndividualChannelStream *ics);
+ void (*update_ltp)(AACContext *ac, SingleChannelElement *sce);
+ void (*vector_pow43)(int *coefs, int len);
+ void (*subband_scale)(int *dst, int *src, int scale, int offset, int len, void *log_context);
+
+};
+
+void ff_aacdec_init_mips(AACContext *c);
+
+#endif /* AVCODEC_AACDEC_H */
diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c
index 2b8ac67659..19662cb7e6 100644
--- a/libavcodec/aacdec_fixed.c
+++ b/libavcodec/aacdec_fixed.c
@@ -71,6 +71,7 @@
#include "sinewin_fixed_tablegen.h"
#include "aac.h"
+#include "aacdec.h"
#include "aactab.h"
#include "aacdectab.h"
#include "adts_header.h"
diff --git a/libavcodec/aacsbr_template.c b/libavcodec/aacsbr_template.c
index 98e9fd8fed..ba8e3495b4 100644
--- a/libavcodec/aacsbr_template.c
+++ b/libavcodec/aacsbr_template.c
@@ -32,7 +32,9 @@
* @author Zoran Basaric ( zoran.basaric at imgtec.com )
*/
+#include "aacdec.h"
#include "aacdectab.h"
+#include "avcodec.h"
#include "libavutil/qsort.h"
static av_cold void aacsbr_tableinit(void)
diff --git a/libavcodec/mips/aacdec_mips.c b/libavcodec/mips/aacdec_mips.c
index cd357cedbc..f4b0767e3b 100644
--- a/libavcodec/mips/aacdec_mips.c
+++ b/libavcodec/mips/aacdec_mips.c
@@ -53,7 +53,7 @@
*/
#include "libavutil/attributes.h"
-#include "libavcodec/aac.h"
+#include "libavcodec/aacdec.h"
#include "aacdec_mips.h"
#include "libavcodec/aactab.h"
#include "libavcodec/sinewin.h"
diff --git a/libavcodec/mips/aacdec_mips.h b/libavcodec/mips/aacdec_mips.h
index 758266fc16..71581986dc 100644
--- a/libavcodec/mips/aacdec_mips.h
+++ b/libavcodec/mips/aacdec_mips.h
@@ -57,7 +57,7 @@
#ifndef AVCODEC_MIPS_AACDEC_MIPS_H
#define AVCODEC_MIPS_AACDEC_MIPS_H
-#include "libavcodec/aac.h"
+#include "libavcodec/aacdec.h"
#include "libavutil/mips/asmdefs.h"
#if HAVE_INLINE_ASM && HAVE_MIPSFPU
diff --git a/libavcodec/mips/aacsbr_mips.c b/libavcodec/mips/aacsbr_mips.c
index 33fd9b229e..546e528895 100644
--- a/libavcodec/mips/aacsbr_mips.c
+++ b/libavcodec/mips/aacsbr_mips.c
@@ -51,7 +51,7 @@
* Reference: libavcodec/aacsbr.c
*/
-#include "libavcodec/aac.h"
+#include "libavcodec/aacdec.h"
#include "libavcodec/aacsbr.h"
#include "libavutil/mem_internal.h"
#include "libavutil/mips/asmdefs.h"
diff --git a/libavcodec/mips/aacsbr_mips.h b/libavcodec/mips/aacsbr_mips.h
index 4750c94024..447393164a 100644
--- a/libavcodec/mips/aacsbr_mips.h
+++ b/libavcodec/mips/aacsbr_mips.h
@@ -54,7 +54,7 @@
#ifndef AVCODEC_MIPS_AACSBR_MIPS_H
#define AVCODEC_MIPS_AACSBR_MIPS_H
-#include "libavcodec/aac.h"
+#include "libavcodec/aacdec.h"
#include "libavcodec/sbr.h"
#include "libavutil/mips/asmdefs.h"
--
2.40.1
More information about the ffmpeg-devel
mailing list