From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Subject: [FFmpeg-devel] [PATCH 2/8] avocdec/aac: Move decoder-only stuff to new header aacdec.h Date: Mon, 26 Feb 2024 02:26:50 +0100 Message-ID: <AS8P250MB0744B69243D0A6044194AACD8F5A2@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw) In-Reply-To: <AS8P250MB0744F2CAA48EEB4AE287F0178F5A2@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> AACContext is not used by the encoder at all. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@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@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2024-02-26 1:41 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-02-26 1:20 [FFmpeg-devel] [PATCH 1/8] avcodec/aacdec_template: Don't use intermediate void* Andreas Rheinhardt 2024-02-26 1:26 ` Andreas Rheinhardt [this message] 2024-02-26 1:26 ` [FFmpeg-devel] [PATCH 3/8] avcodec/aacsbr: Remove unused parameter from sbr_gain_calc Andreas Rheinhardt 2024-02-26 1:26 ` [FFmpeg-devel] [PATCH 4/8] avcodec/aacdec: Rename AACContext to AACDecContext Andreas Rheinhardt 2024-02-26 1:26 ` [FFmpeg-devel] [PATCH 5/8] avcodec/aacps: Inline ff_ps_ctx_init() Andreas Rheinhardt 2024-02-26 1:26 ` [FFmpeg-devel] [PATCH 6/8] avcodec/aacsbr_template: Avoid using AACDecContext; pass logctx directly Andreas Rheinhardt 2024-02-26 14:43 ` Lynne 2024-02-26 23:13 ` Andreas Rheinhardt 2024-02-26 1:26 ` [FFmpeg-devel] [PATCH 7/8] avcodec/sbr: Remove unused AACDecContext* parameter from sbr_lf_gen_mips Andreas Rheinhardt 2024-02-26 1:26 ` [FFmpeg-devel] [PATCH 8/8] avcodec/aac: Split ChannelElement in decoder and encoder structs Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=AS8P250MB0744B69243D0A6044194AACD8F5A2@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git