diff mbox series

[FFmpeg-devel] avcodec: add ACC_NON_HE decoder

Message ID DU0PR02MB91717986FFEF47B09CEDEA17F8D09@DU0PR02MB9171.eurprd02.prod.outlook.com
State New
Headers show
Series [FFmpeg-devel] avcodec: add ACC_NON_HE decoder | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 fail Make fate failed
andriy/make_x86 success Make finished
andriy/make_fate_x86 fail Make fate failed

Commit Message

Kristofer Björkström Jan. 31, 2023, 4:34 p.m. UTC
As ACC decoder but with HE and HEv2 disabled.

Signed-off-by: Kristofer Björkström <kristofb@axis.com>
---
 Changelog                    |  1 +
 configure                    |  1 +
 libavcodec/Makefile          |  3 +++
 libavcodec/aacdec.c          | 21 +++++++++++++++++++++
 libavcodec/aacdec_template.c |  8 ++++++++
 libavcodec/aactab.c          |  2 +-
 libavcodec/aarch64/Makefile  |  4 ++++
 libavcodec/allcodecs.c       |  1 +
 libavcodec/arm/Makefile      |  4 ++++
 libavcodec/mips/Makefile     |  4 ++++
 libavcodec/version.h         |  2 +-
 libavcodec/x86/Makefile      |  4 ++++
 tests/checkasm/Makefile      |  2 ++
 tests/checkasm/checkasm.c    |  2 +-
 14 files changed, 56 insertions(+), 3 deletions(-)

--
2.30.2

Comments

Lynne Jan. 31, 2023, 8:01 p.m. UTC | #1
Jan 31, 2023, 17:34 by Kristofer.Bjorkstrom@axis.com:

> As ACC decoder but with HE and HEv2 disabled.
>
> Signed-off-by: Kristofer Björkström <kristofb@axis.com>
> ---
>  Changelog                    |  1 +
>  configure                    |  1 +
>  libavcodec/Makefile          |  3 +++
>  libavcodec/aacdec.c          | 21 +++++++++++++++++++++
>  libavcodec/aacdec_template.c |  8 ++++++++
>  libavcodec/aactab.c          |  2 +-
>  libavcodec/aarch64/Makefile  |  4 ++++
>  libavcodec/allcodecs.c       |  1 +
>  libavcodec/arm/Makefile      |  4 ++++
>  libavcodec/mips/Makefile     |  4 ++++
>  libavcodec/version.h         |  2 +-
>  libavcodec/x86/Makefile      |  4 ++++
>  tests/checkasm/Makefile      |  2 ++
>  tests/checkasm/checkasm.c    |  2 +-
>  14 files changed, 56 insertions(+), 3 deletions(-)
>
> diff --git a/Changelog b/Changelog
> index aa0dad13a1..a9f5b54baa 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -35,6 +35,7 @@ version <next>:
>  - ffmpeg CLI new options: -enc_stats_pre[_fmt], -enc_stats_post[_fmt]
>  - hstack_vaapi, vstack_vaapi and xstack_vaapi filters
>  - XMD ADPCM decoder and demuxer
> +- ACC NON HE decoder 
>

Why? Also, why a separate decoder rather than a --disable-he-aac config option?
Andreas Rheinhardt Jan. 31, 2023, 8:18 p.m. UTC | #2
Kristofer Björkström:
> As ACC decoder but with HE and HEv2 disabled.
> 
> Signed-off-by: Kristofer Björkström <kristofb@axis.com>
> ---
>  Changelog                    |  1 +
>  configure                    |  1 +
>  libavcodec/Makefile          |  3 +++
>  libavcodec/aacdec.c          | 21 +++++++++++++++++++++
>  libavcodec/aacdec_template.c |  8 ++++++++
>  libavcodec/aactab.c          |  2 +-
>  libavcodec/aarch64/Makefile  |  4 ++++
>  libavcodec/allcodecs.c       |  1 +
>  libavcodec/arm/Makefile      |  4 ++++
>  libavcodec/mips/Makefile     |  4 ++++
>  libavcodec/version.h         |  2 +-
>  libavcodec/x86/Makefile      |  4 ++++
>  tests/checkasm/Makefile      |  2 ++
>  tests/checkasm/checkasm.c    |  2 +-
>  14 files changed, 56 insertions(+), 3 deletions(-)
> 
> diff --git a/Changelog b/Changelog
> index aa0dad13a1..a9f5b54baa 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -35,6 +35,7 @@ version <next>:
>  - ffmpeg CLI new options: -enc_stats_pre[_fmt], -enc_stats_post[_fmt]
>  - hstack_vaapi, vstack_vaapi and xstack_vaapi filters
>  - XMD ADPCM decoder and demuxer
> +- ACC NON HE decoder

What is the aim of this? Is it patents?

> 
> 
>  version 5.1:
> diff --git a/configure b/configure
> index 47790d10f5..7a06c1a34c 100755
> --- a/configure
> +++ b/configure
> @@ -2746,6 +2746,7 @@ rdft_select="fft"
> 
>  # decoders / encoders
>  aac_decoder_select="adts_header mpeg4audio sinewin"
> +aac_non_he_decoder_select="adts_header mpeg4audio sinewin"
>  aac_fixed_decoder_select="adts_header mpeg4audio"
>  aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
>  aac_latm_decoder_select="aac_decoder aac_latm_parser"
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index 304c2bc2e3..43d86e1899 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -180,6 +180,9 @@ OBJS-$(CONFIG_A64MULTI5_ENCODER)       += a64multienc.o elbg.o
>  OBJS-$(CONFIG_AAC_DECODER)             += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \
>                                            kbdwin.o \
>                                            sbrdsp.o aacpsdsp_float.o cbrt_data.o
> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \
> +                                          kbdwin.o \
> +                                          sbrdsp.o aacpsdsp_float.o cbrt_data.o

This will require keeping both these lists and all similar lists in all
arch-specific Makefiles in sync. This is maintainence work and prone to
fail; the usual way to achieve this aim is by making a decoder select
another one in configure.

>  OBJS-$(CONFIG_AAC_FIXED_DECODER)       += aacdec_fixed.o aactab.o aacsbr_fixed.o aacps_common.o aacps_fixed.o \
>                                            kbdwin.o \
>                                            sbrdsp_fixed.o aacpsdsp_fixed.o cbrt_data_fixed.o
> diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
> index ca31540d3c..b55de9e180 100644
> --- a/libavcodec/aacdec.c
> +++ b/libavcodec/aacdec.c
> @@ -571,6 +571,27 @@ const FFCodec ff_aac_decoder = {
>      .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
>  };
> 
> +const FFCodec ff_aac_non_he_decoder = {
> +    .p.name          = "aac",
> +    CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
> +    .p.type          = AVMEDIA_TYPE_AUDIO,
> +    .p.id            = AV_CODEC_ID_AAC,
> +    .priv_data_size  = sizeof(AACContext),
> +    .init            = aac_decode_init,
> +    .close           = aac_decode_close,
> +    FF_CODEC_DECODE_CB(aac_decode_frame),
> +    .p.sample_fmts   = (const enum AVSampleFormat[]) {
> +        AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE
> +    },
> +    .p.capabilities  = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
> +    .caps_internal   = FF_CODEC_CAP_INIT_CLEANUP,
> +    CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(aac_channel_layout)
> +    .p.ch_layouts    = aac_ch_layout,
> +    .flush = flush,
> +    .p.priv_class    = &aac_decoder_class,
> +    .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
> +};
> +
>  /*
>      Note: This decoder filter is intended to decode LATM streams transferred
>      in MPEG transport streams which only contain one program.
> diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
> index 444dc4fa9d..bdadecac54 100644
> --- a/libavcodec/aacdec_template.c
> +++ b/libavcodec/aacdec_template.c
> @@ -93,6 +93,7 @@
>  #include "libavutil/thread.h"
>  #include "decode.h"
>  #include "internal.h"
> +#include "config_components.h"
> 
>  static VLC vlc_scalefactors;
>  static VLC vlc_spectral[11];
> @@ -1019,7 +1020,14 @@ static int decode_audio_specific_config_gb(AACContext *ac,
>          *m4ac = m4ac_bak;
>          return AVERROR_INVALIDDATA;
>      }
> +#if CONFIG_AAC_NON_HE_DECODER
> +    if (m4ac->ps > 0 || m4ac->sbr > 0 || avctx->profile >= FF_PROFILE_AAC_HE) {
> 
> +        av_log(avctx, AV_LOG_ERROR, "HE-AAC is not supported\n");
> +
> +        return AVERROR_INVALIDDATA;
> +    }
> +#endif

1. This is completely wrong, as it does not distinguish between the
non-HE decoder and the ordinary decoders (i.e. it will cripple the
latter one).
2. Although you only add a floating-point non-HE decoder, you also add
this check to the fixed-point decoders (and cripple them in the process).


>      skip_bits_long(gb, i);
> 
>      switch (m4ac->object_type) {
> diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c
> index 0f4941d5df..cf75904958 100644
> --- a/libavcodec/aactab.c
> +++ b/libavcodec/aactab.c
> @@ -39,7 +39,7 @@
>  float ff_aac_pow2sf_tab[428];
>  float ff_aac_pow34sf_tab[428];
> 
> -#if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER
> +#if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER || CONFIG_AAC_NON_HE_DECODER
>  #include "kbdwin.h"
>  #include "sinewin.h"
> 
> diff --git a/libavcodec/aarch64/Makefile b/libavcodec/aarch64/Makefile
> index 02fb51c3ab..016371a166 100644
> --- a/libavcodec/aarch64/Makefile
> +++ b/libavcodec/aarch64/Makefile
> @@ -17,6 +17,8 @@ OBJS-$(CONFIG_VP8DSP)                   += aarch64/vp8dsp_init_aarch64.o
>  # decoders/encoders
>  OBJS-$(CONFIG_AAC_DECODER)              += aarch64/aacpsdsp_init_aarch64.o \
>                                             aarch64/sbrdsp_init_aarch64.o
> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)       += aarch64/aacpsdsp_init_aarch64.o \
> +                                           aarch64/sbrdsp_init_aarch64.o
>  OBJS-$(CONFIG_DCA_DECODER)              += aarch64/synth_filter_init.o
>  OBJS-$(CONFIG_OPUS_DECODER)             += aarch64/opusdsp_init.o
>  OBJS-$(CONFIG_RV40_DECODER)             += aarch64/rv40dsp_init_aarch64.o
> @@ -36,6 +38,7 @@ ARMV8-OBJS-$(CONFIG_VIDEODSP)           += aarch64/videodsp.o
> 
>  # subsystems
>  NEON-OBJS-$(CONFIG_AAC_DECODER)         += aarch64/sbrdsp_neon.o
> +NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER)  += aarch64/sbrdsp_neon.o
>  NEON-OBJS-$(CONFIG_FFT)                 += aarch64/fft_neon.o
>  NEON-OBJS-$(CONFIG_FMTCONVERT)          += aarch64/fmtconvert_neon.o
>  NEON-OBJS-$(CONFIG_H264CHROMA)          += aarch64/h264cmc_neon.o
> @@ -56,6 +59,7 @@ NEON-OBJS-$(CONFIG_VP8DSP)              += aarch64/vp8dsp_neon.o
> 
>  # decoders/encoders
>  NEON-OBJS-$(CONFIG_AAC_DECODER)         += aarch64/aacpsdsp_neon.o
> +NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER)  += aarch64/aacpsdsp_neon.o
>  NEON-OBJS-$(CONFIG_DCA_DECODER)         += aarch64/synth_filter_neon.o
>  NEON-OBJS-$(CONFIG_OPUS_DECODER)        += aarch64/opusdsp_neon.o
>  NEON-OBJS-$(CONFIG_VORBIS_DECODER)      += aarch64/vorbisdsp_neon.o
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index ff82423a88..72ae363fbf 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -423,6 +423,7 @@ extern const FFCodec ff_zmbv_decoder;
>  /* audio codecs */
>  extern const FFCodec ff_aac_encoder;
>  extern const FFCodec ff_aac_decoder;
> +extern const FFCodec ff_aac_non_he_decoder;
>  extern const FFCodec ff_aac_fixed_decoder;
>  extern const FFCodec ff_aac_latm_decoder;
>  extern const FFCodec ff_ac3_encoder;
> diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile
> index 5d284bdc01..f813cdc65f 100644
> --- a/libavcodec/arm/Makefile
> +++ b/libavcodec/arm/Makefile
> @@ -35,6 +35,8 @@ OBJS-$(CONFIG_VP8DSP)                  += arm/vp8dsp_init_arm.o
>  # decoders/encoders
>  OBJS-$(CONFIG_AAC_DECODER)             += arm/aacpsdsp_init_arm.o       \
>                                            arm/sbrdsp_init_arm.o
> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += arm/aacpsdsp_init_arm.o       \
> +                                          arm/sbrdsp_init_arm.o
>  OBJS-$(CONFIG_DCA_DECODER)             += arm/synth_filter_init_arm.o
>  OBJS-$(CONFIG_FLAC_DECODER)            += arm/flacdsp_init_arm.o        \
>                                            arm/flacdsp_arm.o
> @@ -134,6 +136,8 @@ NEON-OBJS-$(CONFIG_VP8DSP)             += arm/vp8dsp_init_neon.o        \
>  # decoders/encoders
>  NEON-OBJS-$(CONFIG_AAC_DECODER)        += arm/aacpsdsp_neon.o           \
>                                            arm/sbrdsp_neon.o
> +NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER) += arm/aacpsdsp_neon.o           \
> +                                          arm/sbrdsp_neon.o
>  NEON-OBJS-$(CONFIG_LLAUDDSP)           += arm/lossless_audiodsp_neon.o
>  NEON-OBJS-$(CONFIG_DCA_DECODER)        += arm/synth_filter_neon.o
>  NEON-OBJS-$(CONFIG_HEVC_DECODER)       += arm/hevcdsp_init_neon.o       \
> diff --git a/libavcodec/mips/Makefile b/libavcodec/mips/Makefile
> index 05ed63bf3e..1070b5e77f 100644
> --- a/libavcodec/mips/Makefile
> +++ b/libavcodec/mips/Makefile
> @@ -20,6 +20,10 @@ OBJS-$(CONFIG_AAC_DECODER)                += mips/aacdec_mips.o            \
>                                               mips/aacsbr_mips.o            \
>                                               mips/sbrdsp_mips.o            \
>                                               mips/aacpsdsp_mips.o
> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)         += mips/aacdec_mips.o            \
> +                                             mips/aacsbr_mips.o            \
> +                                             mips/sbrdsp_mips.o            \
> +                                             mips/aacpsdsp_mips.o
>  MIPSDSP-OBJS-$(CONFIG_AAC_ENCODER)        += mips/aaccoder_mips.o
>  MIPSFPU-OBJS-$(CONFIG_AAC_ENCODER)        += mips/iirfilter_mips.o
>  OBJS-$(CONFIG_HEVC_DECODER)               += mips/hevcdsp_init_mips.o      \
> diff --git a/libavcodec/version.h b/libavcodec/version.h
> index 2ed4ef5547..499c6bb175 100644
> --- a/libavcodec/version.h
> +++ b/libavcodec/version.h
> @@ -29,7 +29,7 @@
> 
>  #include "version_major.h"
> 
> -#define LIBAVCODEC_VERSION_MINOR  60
> +#define LIBAVCODEC_VERSION_MINOR  61
>  #define LIBAVCODEC_VERSION_MICRO 100
> 
>  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
> diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
> index 118daca333..64fec2ce59 100644
> --- a/libavcodec/x86/Makefile
> +++ b/libavcodec/x86/Makefile
> @@ -41,6 +41,8 @@ OBJS-$(CONFIG_XMM_CLOBBER_TEST)        += x86/w64xmmtest.o
>  # decoders/encoders
>  OBJS-$(CONFIG_AAC_DECODER)             += x86/aacpsdsp_init.o          \
>                                            x86/sbrdsp_init.o
> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += x86/aacpsdsp_init.o          \
> +                                          x86/sbrdsp_init.o
>  OBJS-$(CONFIG_AAC_ENCODER)             += x86/aacencdsp_init.o
>  OBJS-$(CONFIG_ADPCM_G722_DECODER)      += x86/g722dsp_init.o
>  OBJS-$(CONFIG_ADPCM_G722_ENCODER)      += x86/g722dsp_init.o
> @@ -151,6 +153,8 @@ X86ASM-OBJS-$(CONFIG_VP8DSP)           += x86/vp8dsp.o                  \
>  # decoders/encoders
>  X86ASM-OBJS-$(CONFIG_AAC_DECODER)      += x86/aacpsdsp.o                \
>                                            x86/sbrdsp.o
> +X86ASM-OBJS-$(CONFIG_AAC_NON_HE_DECODER) += x86/aacpsdsp.o                \
> +                                          x86/sbrdsp.o
>  X86ASM-OBJS-$(CONFIG_AAC_ENCODER)      += x86/aacencdsp.o
>  X86ASM-OBJS-$(CONFIG_ADPCM_G722_DECODER) += x86/g722dsp.o
>  X86ASM-OBJS-$(CONFIG_ADPCM_G722_ENCODER) += x86/g722dsp.o
> diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
> index a6f06c7007..dd8ac1f278 100644
> --- a/tests/checkasm/Makefile
> +++ b/tests/checkasm/Makefile
> @@ -20,6 +20,8 @@ AVCODECOBJS-$(CONFIG_VIDEODSP)          += videodsp.o
>  # decoders/encoders
>  AVCODECOBJS-$(CONFIG_AAC_DECODER)       += aacpsdsp.o \
>                                             sbrdsp.o
> +AVCODECOBJS-$(CONFIG_AAC_NON_HE_DECODER) += aacpsdsp.o \
> +                                            sbrdsp.o
>  AVCODECOBJS-$(CONFIG_ALAC_DECODER)      += alacdsp.o
>  AVCODECOBJS-$(CONFIG_DCA_DECODER)       += synth_filter.o
>  AVCODECOBJS-$(CONFIG_EXR_DECODER)       += exrdsp.o
> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
> index e96d84a7da..8f7796ca3a 100644
> --- a/tests/checkasm/checkasm.c
> +++ b/tests/checkasm/checkasm.c
> @@ -74,7 +74,7 @@ static const struct {
>      void (*func)(void);
>  } tests[] = {
>  #if CONFIG_AVCODEC
> -    #if CONFIG_AAC_DECODER
> +    #if CONFIG_AAC_DECODER || CONFIG_AAC_NON_HE_DECODER
>          { "aacpsdsp", checkasm_check_aacpsdsp },
>          { "sbrdsp",   checkasm_check_sbrdsp },
>      #endif
> --
> 2.30.2
> 
> _______________________________________________
> 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".
Kristofer Björkström Feb. 1, 2023, 2:55 p.m. UTC | #3
>Kristofer Björkström:
>> As ACC decoder but with HE and HEv2 disabled.
>> 
>> Signed-off-by: Kristofer Björkström <kristofb@axis.com>>
>> ---
>>  Changelog                    |  1 +
>>  configure                    |  1 +
>>  libavcodec/Makefile          |  3 +++
>>  libavcodec/aacdec.c          | 21 +++++++++++++++++++++
>>  libavcodec/aacdec_template.c |  8 ++++++++
>>  libavcodec/aactab.c          |  2 +-
>>  libavcodec/aarch64/Makefile  |  4 ++++
>>  libavcodec/allcodecs.c       |  1 +
>>  libavcodec/arm/Makefile      |  4 ++++
>>  libavcodec/mips/Makefile     |  4 ++++
>>  libavcodec/version.h         |  2 +-
>>  libavcodec/x86/Makefile      |  4 ++++
>>  tests/checkasm/Makefile      |  2 ++
>>  tests/checkasm/checkasm.c    |  2 +-
>>  14 files changed, 56 insertions(+), 3 deletions(-)
>> 
>> diff --git a/Changelog b/Changelog
>> index aa0dad13a1..a9f5b54baa 100644
>> --- a/Changelog
>> +++ b/Changelog
>> @@ -35,6 +35,7 @@ version <next>>:
>>  - ffmpeg CLI new options: -enc_stats_pre[_fmt], -enc_stats_post[_fmt]
>>  - hstack_vaapi, vstack_vaapi and xstack_vaapi filters
>>  - XMD ADPCM decoder and demuxer
>> +- ACC NON HE decoder
>
>What is the aim of this? Is it patents?

To avoid patents in AAC HE

>
>> 
>> 
>>  version 5.1:
>> diff --git a/configure b/configure
>> index 47790d10f5..7a06c1a34c 100755
>> --- a/configure
>> +++ b/configure
>> @@ -2746,6 +2746,7 @@ rdft_select="fft"
>> 
>>  # decoders / encoders
>>  aac_decoder_select="adts_header mpeg4audio sinewin"
>> +aac_non_he_decoder_select="adts_header mpeg4audio sinewin"
>>  aac_fixed_decoder_select="adts_header mpeg4audio"
>>  aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
>>  aac_latm_decoder_select="aac_decoder aac_latm_parser"
>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> index 304c2bc2e3..43d86e1899 100644
>> --- a/libavcodec/Makefile
>> +++ b/libavcodec/Makefile
>> @@ -180,6 +180,9 @@ OBJS-$(CONFIG_A64MULTI5_ENCODER)       += a64multienc.o elbg.o
>>  OBJS-$(CONFIG_AAC_DECODER)             += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \
>>                                            kbdwin.o \
>>                                            sbrdsp.o aacpsdsp_float.o cbrt_data.o
>> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \
>> +                                          kbdwin.o \
>> +                                          sbrdsp.o aacpsdsp_float.o cbrt_data.o
>
>This will require keeping both these lists and all similar lists in all
>arch-specific Makefiles in sync. This is maintainence work and prone to
>fail; the usual way to achieve this aim is by making a decoder select
>another one in configure.

New patch "[PATCH] configure: add --disable-he-aac option" avoids this
>
>>  OBJS-$(CONFIG_AAC_FIXED_DECODER)       += aacdec_fixed.o aactab.o aacsbr_fixed.o aacps_common.o aacps_fixed.o \
>>                                            kbdwin.o \
>>                                            sbrdsp_fixed.o aacpsdsp_fixed.o cbrt_data_fixed.o
>> diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
>> index ca31540d3c..b55de9e180 100644
>> --- a/libavcodec/aacdec.c
>> +++ b/libavcodec/aacdec.c
>> @@ -571,6 +571,27 @@ const FFCodec ff_aac_decoder = {
>>      .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
>>  };
>> 
>> +const FFCodec ff_aac_non_he_decoder = {
>> +    .p.name          = "aac",
>> +    CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
>> +    .p.type          = AVMEDIA_TYPE_AUDIO,
>> +    .p.id            = AV_CODEC_ID_AAC,
>> +    .priv_data_size  = sizeof(AACContext),
>> +    .init            = aac_decode_init,
>> +    .close           = aac_decode_close,
>> +    FF_CODEC_DECODE_CB(aac_decode_frame),
>> +    .p.sample_fmts   = (const enum AVSampleFormat[]) {
>> +        AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE
>> +    },
>> +    .p.capabilities  = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
>> +    .caps_internal   = FF_CODEC_CAP_INIT_CLEANUP,
>> +    CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(aac_channel_layout)
>> +    .p.ch_layouts    = aac_ch_layout,
>> +    .flush = flush,
>> +    .p.priv_class    = &aac_decoder_class,
>> +    .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
>> +};
>> +
>>  /*
>>      Note: This decoder filter is intended to decode LATM streams transferred
>>      in MPEG transport streams which only contain one program.
>> diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
>> index 444dc4fa9d..bdadecac54 100644
>> --- a/libavcodec/aacdec_template.c
>> +++ b/libavcodec/aacdec_template.c
>> @@ -93,6 +93,7 @@
>>  #include "libavutil/thread.h"
>>  #include "decode.h"
>>  #include "internal.h"
>> +#include "config_components.h"
>> 
>>  static VLC vlc_scalefactors;
>>  static VLC vlc_spectral[11];
>> @@ -1019,7 +1020,14 @@ static int decode_audio_specific_config_gb(AACContext *ac,
>>          *m4ac = m4ac_bak;
>>          return AVERROR_INVALIDDATA;
>>      }
>> +#if CONFIG_AAC_NON_HE_DECODER
>> +    if (m4ac->>ps >> 0 || m4ac->>sbr >> 0 || avctx->>profile >>= FF_PROFILE_AAC_HE) {
>> 
>> +        av_log(avctx, AV_LOG_ERROR, "HE-AAC is not supported\n");
>> +
>> +        return AVERROR_INVALIDDATA;
>> +    }
>> +#endif
>
>1. This is completely wrong, as it does not distinguish between the
>non-HE decoder and the ordinary decoders (i.e. it will cripple the
>latter one).
>2. Although you only add a floating-point non-HE decoder, you also add
>this check to the fixed-point decoders (and cripple them in the process).
>
>

Thanks for pointing that out. Hopefully better with new patch: "[PATCH] configure: add --disable-he-aac option"

>>      skip_bits_long(gb, i);
>> 
>>      switch (m4ac->>object_type) {
>> diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c
>> index 0f4941d5df..cf75904958 100644
>> --- a/libavcodec/aactab.c
>> +++ b/libavcodec/aactab.c
>> @@ -39,7 +39,7 @@
>>  float ff_aac_pow2sf_tab[428];
>>  float ff_aac_pow34sf_tab[428];
>> 
>> -#if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER
>> +#if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER || CONFIG_AAC_NON_HE_DECODER
>>  #include "kbdwin.h"
>>  #include "sinewin.h"
>> 
>> diff --git a/libavcodec/aarch64/Makefile b/libavcodec/aarch64/Makefile
>> index 02fb51c3ab..016371a166 100644
>> --- a/libavcodec/aarch64/Makefile
>> +++ b/libavcodec/aarch64/Makefile
>> @@ -17,6 +17,8 @@ OBJS-$(CONFIG_VP8DSP)                   += aarch64/vp8dsp_init_aarch64.o
>>  # decoders/encoders
>>  OBJS-$(CONFIG_AAC_DECODER)              += aarch64/aacpsdsp_init_aarch64.o \
>>                                             aarch64/sbrdsp_init_aarch64.o
>> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)       += aarch64/aacpsdsp_init_aarch64.o \
>> +                                           aarch64/sbrdsp_init_aarch64.o
>>  OBJS-$(CONFIG_DCA_DECODER)              += aarch64/synth_filter_init.o
>>  OBJS-$(CONFIG_OPUS_DECODER)             += aarch64/opusdsp_init.o
>>  OBJS-$(CONFIG_RV40_DECODER)             += aarch64/rv40dsp_init_aarch64.o
>> @@ -36,6 +38,7 @@ ARMV8-OBJS-$(CONFIG_VIDEODSP)           += aarch64/videodsp.o
>> 
>>  # subsystems
>>  NEON-OBJS-$(CONFIG_AAC_DECODER)         += aarch64/sbrdsp_neon.o
>> +NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER)  += aarch64/sbrdsp_neon.o
>>  NEON-OBJS-$(CONFIG_FFT)                 += aarch64/fft_neon.o
>>  NEON-OBJS-$(CONFIG_FMTCONVERT)          += aarch64/fmtconvert_neon.o
>>  NEON-OBJS-$(CONFIG_H264CHROMA)          += aarch64/h264cmc_neon.o
>> @@ -56,6 +59,7 @@ NEON-OBJS-$(CONFIG_VP8DSP)              += aarch64/vp8dsp_neon.o
>> 
>>  # decoders/encoders
>>  NEON-OBJS-$(CONFIG_AAC_DECODER)         += aarch64/aacpsdsp_neon.o
>> +NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER)  += aarch64/aacpsdsp_neon.o
>>  NEON-OBJS-$(CONFIG_DCA_DECODER)         += aarch64/synth_filter_neon.o
>>  NEON-OBJS-$(CONFIG_OPUS_DECODER)        += aarch64/opusdsp_neon.o
>>  NEON-OBJS-$(CONFIG_VORBIS_DECODER)      += aarch64/vorbisdsp_neon.o
>> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
>> index ff82423a88..72ae363fbf 100644
>> --- a/libavcodec/allcodecs.c
>> +++ b/libavcodec/allcodecs.c
>> @@ -423,6 +423,7 @@ extern const FFCodec ff_zmbv_decoder;
>>  /* audio codecs */
>>  extern const FFCodec ff_aac_encoder;
>>  extern const FFCodec ff_aac_decoder;
>> +extern const FFCodec ff_aac_non_he_decoder;
>>  extern const FFCodec ff_aac_fixed_decoder;
>>  extern const FFCodec ff_aac_latm_decoder;
>>  extern const FFCodec ff_ac3_encoder;
>> diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile
>> index 5d284bdc01..f813cdc65f 100644
>> --- a/libavcodec/arm/Makefile
>> +++ b/libavcodec/arm/Makefile
>> @@ -35,6 +35,8 @@ OBJS-$(CONFIG_VP8DSP)                  += arm/vp8dsp_init_arm.o
>>  # decoders/encoders
>>  OBJS-$(CONFIG_AAC_DECODER)             += arm/aacpsdsp_init_arm.o       \
>>                                            arm/sbrdsp_init_arm.o
>> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += arm/aacpsdsp_init_arm.o       \
>> +                                          arm/sbrdsp_init_arm.o
>>  OBJS-$(CONFIG_DCA_DECODER)             += arm/synth_filter_init_arm.o
>>  OBJS-$(CONFIG_FLAC_DECODER)            += arm/flacdsp_init_arm.o        \
>>                                            arm/flacdsp_arm.o
>> @@ -134,6 +136,8 @@ NEON-OBJS-$(CONFIG_VP8DSP)             += arm/vp8dsp_init_neon.o        \
>>  # decoders/encoders
>>  NEON-OBJS-$(CONFIG_AAC_DECODER)        += arm/aacpsdsp_neon.o           \
>>                                            arm/sbrdsp_neon.o
>> +NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER) += arm/aacpsdsp_neon.o           \
>> +                                          arm/sbrdsp_neon.o
>>  NEON-OBJS-$(CONFIG_LLAUDDSP)           += arm/lossless_audiodsp_neon.o
>>  NEON-OBJS-$(CONFIG_DCA_DECODER)        += arm/synth_filter_neon.o
>>  NEON-OBJS-$(CONFIG_HEVC_DECODER)       += arm/hevcdsp_init_neon.o       \
>> diff --git a/libavcodec/mips/Makefile b/libavcodec/mips/Makefile
>> index 05ed63bf3e..1070b5e77f 100644
>> --- a/libavcodec/mips/Makefile
>> +++ b/libavcodec/mips/Makefile
>> @@ -20,6 +20,10 @@ OBJS-$(CONFIG_AAC_DECODER)                += mips/aacdec_mips.o            \
>>                                               mips/aacsbr_mips.o            \
>>                                               mips/sbrdsp_mips.o            \
>>                                               mips/aacpsdsp_mips.o
>> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)         += mips/aacdec_mips.o            \
>> +                                             mips/aacsbr_mips.o            \
>> +                                             mips/sbrdsp_mips.o            \
>> +                                             mips/aacpsdsp_mips.o
>>  MIPSDSP-OBJS-$(CONFIG_AAC_ENCODER)        += mips/aaccoder_mips.o
>>  MIPSFPU-OBJS-$(CONFIG_AAC_ENCODER)        += mips/iirfilter_mips.o
>>  OBJS-$(CONFIG_HEVC_DECODER)               += mips/hevcdsp_init_mips.o      \
>> diff --git a/libavcodec/version.h b/libavcodec/version.h
>> index 2ed4ef5547..499c6bb175 100644
>> --- a/libavcodec/version.h
>> +++ b/libavcodec/version.h
>> @@ -29,7 +29,7 @@
>> 
>>  #include "version_major.h"
>> 
>> -#define LIBAVCODEC_VERSION_MINOR  60
>> +#define LIBAVCODEC_VERSION_MINOR  61
>>  #define LIBAVCODEC_VERSION_MICRO 100
>> 
>>  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
>> diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
>> index 118daca333..64fec2ce59 100644
>> --- a/libavcodec/x86/Makefile
>> +++ b/libavcodec/x86/Makefile
>> @@ -41,6 +41,8 @@ OBJS-$(CONFIG_XMM_CLOBBER_TEST)        += x86/w64xmmtest.o
>>  # decoders/encoders
>>  OBJS-$(CONFIG_AAC_DECODER)             += x86/aacpsdsp_init.o          \
>>                                            x86/sbrdsp_init.o
>> +OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += x86/aacpsdsp_init.o          \
>> +                                          x86/sbrdsp_init.o
>>  OBJS-$(CONFIG_AAC_ENCODER)             += x86/aacencdsp_init.o
>>  OBJS-$(CONFIG_ADPCM_G722_DECODER)      += x86/g722dsp_init.o
>>  OBJS-$(CONFIG_ADPCM_G722_ENCODER)      += x86/g722dsp_init.o
>> @@ -151,6 +153,8 @@ X86ASM-OBJS-$(CONFIG_VP8DSP)           += x86/vp8dsp.o                  \
>>  # decoders/encoders
>>  X86ASM-OBJS-$(CONFIG_AAC_DECODER)      += x86/aacpsdsp.o                \
>>                                            x86/sbrdsp.o
>> +X86ASM-OBJS-$(CONFIG_AAC_NON_HE_DECODER) += x86/aacpsdsp.o                \
>> +                                          x86/sbrdsp.o
>>  X86ASM-OBJS-$(CONFIG_AAC_ENCODER)      += x86/aacencdsp.o
>>  X86ASM-OBJS-$(CONFIG_ADPCM_G722_DECODER) += x86/g722dsp.o
>>  X86ASM-OBJS-$(CONFIG_ADPCM_G722_ENCODER) += x86/g722dsp.o
>> diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
>> index a6f06c7007..dd8ac1f278 100644
>> --- a/tests/checkasm/Makefile
>> +++ b/tests/checkasm/Makefile
>> @@ -20,6 +20,8 @@ AVCODECOBJS-$(CONFIG_VIDEODSP)          += videodsp.o
>>  # decoders/encoders
>>  AVCODECOBJS-$(CONFIG_AAC_DECODER)       += aacpsdsp.o \
>>                                             sbrdsp.o
>> +AVCODECOBJS-$(CONFIG_AAC_NON_HE_DECODER) += aacpsdsp.o \
>> +                                            sbrdsp.o
>>  AVCODECOBJS-$(CONFIG_ALAC_DECODER)      += alacdsp.o
>>  AVCODECOBJS-$(CONFIG_DCA_DECODER)       += synth_filter.o
>>  AVCODECOBJS-$(CONFIG_EXR_DECODER)       += exrdsp.o
>> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
>> index e96d84a7da..8f7796ca3a 100644
>> --- a/tests/checkasm/checkasm.c
>> +++ b/tests/checkasm/checkasm.c
>> @@ -74,7 +74,7 @@ static const struct {
>>      void (*func)(void);
>>  } tests[] = {
>>  #if CONFIG_AVCODEC
>> -    #if CONFIG_AAC_DECODER
>> +    #if CONFIG_AAC_DECODER || CONFIG_AAC_NON_HE_DECODER
>>          { "aacpsdsp", checkasm_check_aacpsdsp },
>>          { "sbrdsp",   checkasm_check_sbrdsp },
>>      #endif
>> --
>> 2.30.2
>> 
>> _______________________________________________
>> 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".


Hi
Posted a new patch: [PATCH] configure: add --disable-he-aac option
Jean-Baptiste Kempf Feb. 1, 2023, 3:19 p.m. UTC | #4
On Wed, 1 Feb 2023, at 15:55, Kristofer Björkström wrote:
>>What is the aim of this? Is it patents?
>
> To avoid patents in AAC HE

Patents? Which patents? Which country does this apply?

The whole FFmpeg is concerned probably with thousands of patents...

I don't see here the gain.

PS: There are patents in normal AAC too
diff mbox series

Patch

diff --git a/Changelog b/Changelog
index aa0dad13a1..a9f5b54baa 100644
--- a/Changelog
+++ b/Changelog
@@ -35,6 +35,7 @@  version <next>:
 - ffmpeg CLI new options: -enc_stats_pre[_fmt], -enc_stats_post[_fmt]
 - hstack_vaapi, vstack_vaapi and xstack_vaapi filters
 - XMD ADPCM decoder and demuxer
+- ACC NON HE decoder


 version 5.1:
diff --git a/configure b/configure
index 47790d10f5..7a06c1a34c 100755
--- a/configure
+++ b/configure
@@ -2746,6 +2746,7 @@  rdft_select="fft"

 # decoders / encoders
 aac_decoder_select="adts_header mpeg4audio sinewin"
+aac_non_he_decoder_select="adts_header mpeg4audio sinewin"
 aac_fixed_decoder_select="adts_header mpeg4audio"
 aac_encoder_select="audio_frame_queue iirfilter lpc sinewin"
 aac_latm_decoder_select="aac_decoder aac_latm_parser"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 304c2bc2e3..43d86e1899 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -180,6 +180,9 @@  OBJS-$(CONFIG_A64MULTI5_ENCODER)       += a64multienc.o elbg.o
 OBJS-$(CONFIG_AAC_DECODER)             += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \
                                           kbdwin.o \
                                           sbrdsp.o aacpsdsp_float.o cbrt_data.o
+OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \
+                                          kbdwin.o \
+                                          sbrdsp.o aacpsdsp_float.o cbrt_data.o
 OBJS-$(CONFIG_AAC_FIXED_DECODER)       += aacdec_fixed.o aactab.o aacsbr_fixed.o aacps_common.o aacps_fixed.o \
                                           kbdwin.o \
                                           sbrdsp_fixed.o aacpsdsp_fixed.o cbrt_data_fixed.o
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index ca31540d3c..b55de9e180 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -571,6 +571,27 @@  const FFCodec ff_aac_decoder = {
     .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
 };

+const FFCodec ff_aac_non_he_decoder = {
+    .p.name          = "aac",
+    CODEC_LONG_NAME("AAC (Advanced Audio Coding)"),
+    .p.type          = AVMEDIA_TYPE_AUDIO,
+    .p.id            = AV_CODEC_ID_AAC,
+    .priv_data_size  = sizeof(AACContext),
+    .init            = aac_decode_init,
+    .close           = aac_decode_close,
+    FF_CODEC_DECODE_CB(aac_decode_frame),
+    .p.sample_fmts   = (const enum AVSampleFormat[]) {
+        AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE
+    },
+    .p.capabilities  = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
+    .caps_internal   = FF_CODEC_CAP_INIT_CLEANUP,
+    CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(aac_channel_layout)
+    .p.ch_layouts    = aac_ch_layout,
+    .flush = flush,
+    .p.priv_class    = &aac_decoder_class,
+    .p.profiles      = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
+};
+
 /*
     Note: This decoder filter is intended to decode LATM streams transferred
     in MPEG transport streams which only contain one program.
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index 444dc4fa9d..bdadecac54 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -93,6 +93,7 @@ 
 #include "libavutil/thread.h"
 #include "decode.h"
 #include "internal.h"
+#include "config_components.h"

 static VLC vlc_scalefactors;
 static VLC vlc_spectral[11];
@@ -1019,7 +1020,14 @@  static int decode_audio_specific_config_gb(AACContext *ac,
         *m4ac = m4ac_bak;
         return AVERROR_INVALIDDATA;
     }
+#if CONFIG_AAC_NON_HE_DECODER
+    if (m4ac->ps > 0 || m4ac->sbr > 0 || avctx->profile >= FF_PROFILE_AAC_HE) {

+        av_log(avctx, AV_LOG_ERROR, "HE-AAC is not supported\n");
+
+        return AVERROR_INVALIDDATA;
+    }
+#endif
     skip_bits_long(gb, i);

     switch (m4ac->object_type) {
diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c
index 0f4941d5df..cf75904958 100644
--- a/libavcodec/aactab.c
+++ b/libavcodec/aactab.c
@@ -39,7 +39,7 @@ 
 float ff_aac_pow2sf_tab[428];
 float ff_aac_pow34sf_tab[428];

-#if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER
+#if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER || CONFIG_AAC_NON_HE_DECODER
 #include "kbdwin.h"
 #include "sinewin.h"

diff --git a/libavcodec/aarch64/Makefile b/libavcodec/aarch64/Makefile
index 02fb51c3ab..016371a166 100644
--- a/libavcodec/aarch64/Makefile
+++ b/libavcodec/aarch64/Makefile
@@ -17,6 +17,8 @@  OBJS-$(CONFIG_VP8DSP)                   += aarch64/vp8dsp_init_aarch64.o
 # decoders/encoders
 OBJS-$(CONFIG_AAC_DECODER)              += aarch64/aacpsdsp_init_aarch64.o \
                                            aarch64/sbrdsp_init_aarch64.o
+OBJS-$(CONFIG_AAC_NON_HE_DECODER)       += aarch64/aacpsdsp_init_aarch64.o \
+                                           aarch64/sbrdsp_init_aarch64.o
 OBJS-$(CONFIG_DCA_DECODER)              += aarch64/synth_filter_init.o
 OBJS-$(CONFIG_OPUS_DECODER)             += aarch64/opusdsp_init.o
 OBJS-$(CONFIG_RV40_DECODER)             += aarch64/rv40dsp_init_aarch64.o
@@ -36,6 +38,7 @@  ARMV8-OBJS-$(CONFIG_VIDEODSP)           += aarch64/videodsp.o

 # subsystems
 NEON-OBJS-$(CONFIG_AAC_DECODER)         += aarch64/sbrdsp_neon.o
+NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER)  += aarch64/sbrdsp_neon.o
 NEON-OBJS-$(CONFIG_FFT)                 += aarch64/fft_neon.o
 NEON-OBJS-$(CONFIG_FMTCONVERT)          += aarch64/fmtconvert_neon.o
 NEON-OBJS-$(CONFIG_H264CHROMA)          += aarch64/h264cmc_neon.o
@@ -56,6 +59,7 @@  NEON-OBJS-$(CONFIG_VP8DSP)              += aarch64/vp8dsp_neon.o

 # decoders/encoders
 NEON-OBJS-$(CONFIG_AAC_DECODER)         += aarch64/aacpsdsp_neon.o
+NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER)  += aarch64/aacpsdsp_neon.o
 NEON-OBJS-$(CONFIG_DCA_DECODER)         += aarch64/synth_filter_neon.o
 NEON-OBJS-$(CONFIG_OPUS_DECODER)        += aarch64/opusdsp_neon.o
 NEON-OBJS-$(CONFIG_VORBIS_DECODER)      += aarch64/vorbisdsp_neon.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index ff82423a88..72ae363fbf 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -423,6 +423,7 @@  extern const FFCodec ff_zmbv_decoder;
 /* audio codecs */
 extern const FFCodec ff_aac_encoder;
 extern const FFCodec ff_aac_decoder;
+extern const FFCodec ff_aac_non_he_decoder;
 extern const FFCodec ff_aac_fixed_decoder;
 extern const FFCodec ff_aac_latm_decoder;
 extern const FFCodec ff_ac3_encoder;
diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile
index 5d284bdc01..f813cdc65f 100644
--- a/libavcodec/arm/Makefile
+++ b/libavcodec/arm/Makefile
@@ -35,6 +35,8 @@  OBJS-$(CONFIG_VP8DSP)                  += arm/vp8dsp_init_arm.o
 # decoders/encoders
 OBJS-$(CONFIG_AAC_DECODER)             += arm/aacpsdsp_init_arm.o       \
                                           arm/sbrdsp_init_arm.o
+OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += arm/aacpsdsp_init_arm.o       \
+                                          arm/sbrdsp_init_arm.o
 OBJS-$(CONFIG_DCA_DECODER)             += arm/synth_filter_init_arm.o
 OBJS-$(CONFIG_FLAC_DECODER)            += arm/flacdsp_init_arm.o        \
                                           arm/flacdsp_arm.o
@@ -134,6 +136,8 @@  NEON-OBJS-$(CONFIG_VP8DSP)             += arm/vp8dsp_init_neon.o        \
 # decoders/encoders
 NEON-OBJS-$(CONFIG_AAC_DECODER)        += arm/aacpsdsp_neon.o           \
                                           arm/sbrdsp_neon.o
+NEON-OBJS-$(CONFIG_AAC_NON_HE_DECODER) += arm/aacpsdsp_neon.o           \
+                                          arm/sbrdsp_neon.o
 NEON-OBJS-$(CONFIG_LLAUDDSP)           += arm/lossless_audiodsp_neon.o
 NEON-OBJS-$(CONFIG_DCA_DECODER)        += arm/synth_filter_neon.o
 NEON-OBJS-$(CONFIG_HEVC_DECODER)       += arm/hevcdsp_init_neon.o       \
diff --git a/libavcodec/mips/Makefile b/libavcodec/mips/Makefile
index 05ed63bf3e..1070b5e77f 100644
--- a/libavcodec/mips/Makefile
+++ b/libavcodec/mips/Makefile
@@ -20,6 +20,10 @@  OBJS-$(CONFIG_AAC_DECODER)                += mips/aacdec_mips.o            \
                                              mips/aacsbr_mips.o            \
                                              mips/sbrdsp_mips.o            \
                                              mips/aacpsdsp_mips.o
+OBJS-$(CONFIG_AAC_NON_HE_DECODER)         += mips/aacdec_mips.o            \
+                                             mips/aacsbr_mips.o            \
+                                             mips/sbrdsp_mips.o            \
+                                             mips/aacpsdsp_mips.o
 MIPSDSP-OBJS-$(CONFIG_AAC_ENCODER)        += mips/aaccoder_mips.o
 MIPSFPU-OBJS-$(CONFIG_AAC_ENCODER)        += mips/iirfilter_mips.o
 OBJS-$(CONFIG_HEVC_DECODER)               += mips/hevcdsp_init_mips.o      \
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 2ed4ef5547..499c6bb175 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@ 

 #include "version_major.h"

-#define LIBAVCODEC_VERSION_MINOR  60
+#define LIBAVCODEC_VERSION_MINOR  61
 #define LIBAVCODEC_VERSION_MICRO 100

 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
index 118daca333..64fec2ce59 100644
--- a/libavcodec/x86/Makefile
+++ b/libavcodec/x86/Makefile
@@ -41,6 +41,8 @@  OBJS-$(CONFIG_XMM_CLOBBER_TEST)        += x86/w64xmmtest.o
 # decoders/encoders
 OBJS-$(CONFIG_AAC_DECODER)             += x86/aacpsdsp_init.o          \
                                           x86/sbrdsp_init.o
+OBJS-$(CONFIG_AAC_NON_HE_DECODER)      += x86/aacpsdsp_init.o          \
+                                          x86/sbrdsp_init.o
 OBJS-$(CONFIG_AAC_ENCODER)             += x86/aacencdsp_init.o
 OBJS-$(CONFIG_ADPCM_G722_DECODER)      += x86/g722dsp_init.o
 OBJS-$(CONFIG_ADPCM_G722_ENCODER)      += x86/g722dsp_init.o
@@ -151,6 +153,8 @@  X86ASM-OBJS-$(CONFIG_VP8DSP)           += x86/vp8dsp.o                  \
 # decoders/encoders
 X86ASM-OBJS-$(CONFIG_AAC_DECODER)      += x86/aacpsdsp.o                \
                                           x86/sbrdsp.o
+X86ASM-OBJS-$(CONFIG_AAC_NON_HE_DECODER) += x86/aacpsdsp.o                \
+                                          x86/sbrdsp.o
 X86ASM-OBJS-$(CONFIG_AAC_ENCODER)      += x86/aacencdsp.o
 X86ASM-OBJS-$(CONFIG_ADPCM_G722_DECODER) += x86/g722dsp.o
 X86ASM-OBJS-$(CONFIG_ADPCM_G722_ENCODER) += x86/g722dsp.o
diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
index a6f06c7007..dd8ac1f278 100644
--- a/tests/checkasm/Makefile
+++ b/tests/checkasm/Makefile
@@ -20,6 +20,8 @@  AVCODECOBJS-$(CONFIG_VIDEODSP)          += videodsp.o
 # decoders/encoders
 AVCODECOBJS-$(CONFIG_AAC_DECODER)       += aacpsdsp.o \
                                            sbrdsp.o
+AVCODECOBJS-$(CONFIG_AAC_NON_HE_DECODER) += aacpsdsp.o \
+                                            sbrdsp.o
 AVCODECOBJS-$(CONFIG_ALAC_DECODER)      += alacdsp.o
 AVCODECOBJS-$(CONFIG_DCA_DECODER)       += synth_filter.o
 AVCODECOBJS-$(CONFIG_EXR_DECODER)       += exrdsp.o
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index e96d84a7da..8f7796ca3a 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -74,7 +74,7 @@  static const struct {
     void (*func)(void);
 } tests[] = {
 #if CONFIG_AVCODEC
-    #if CONFIG_AAC_DECODER
+    #if CONFIG_AAC_DECODER || CONFIG_AAC_NON_HE_DECODER
         { "aacpsdsp", checkasm_check_aacpsdsp },
         { "sbrdsp",   checkasm_check_sbrdsp },
     #endif