It will be reused by the AAC decoder.
huffyuvencdsp
idctdsp
iirfilter
+ imdct15
intrax8
lgplv3
lpc
nuv_decoder_select="idctdsp lzo"
on2avc_decoder_select="mdct"
opus_decoder_deps="avresample"
+opus_decoder_select="imdct15"
png_decoder_deps="zlib"
png_encoder_deps="zlib"
png_encoder_select="huffyuvencdsp"
OBJS-$(CONFIG_HUFFYUVENCDSP) += huffyuvencdsp.o
OBJS-$(CONFIG_IDCTDSP) += idctdsp.o simple_idct.o jrevdct.o
OBJS-$(CONFIG_IIRFILTER) += iirfilter.o
+OBJS-$(CONFIG_IMDCT15) += imdct15.o
OBJS-$(CONFIG_INTRAX8) += intrax8.o intrax8dsp.o
OBJS-$(CONFIG_LIBXVID) += libxvid_rc.o
OBJS-$(CONFIG_LPC) += lpc.o
OBJS-$(CONFIG_NUV_DECODER) += nuv.o rtjpeg.o
OBJS-$(CONFIG_ON2AVC_DECODER) += on2avc.o on2avcdata.o
OBJS-$(CONFIG_OPUS_DECODER) += opusdec.o opus.o opus_celt.o \
- opus_imdct.o opus_silk.o \
- vorbis_data.o
+ opus_silk.o vorbis_data.o
OBJS-$(CONFIG_PAF_AUDIO_DECODER) += pafaudio.o
OBJS-$(CONFIG_PAF_VIDEO_DECODER) += pafvideo.o
OBJS-$(CONFIG_PAM_DECODER) += pnmdec.o pnm.o
OBJS-$(CONFIG_H264DSP) += aarch64/h264dsp_init_aarch64.o
OBJS-$(CONFIG_H264QPEL) += aarch64/h264qpel_init_aarch64.o
OBJS-$(CONFIG_HPELDSP) += aarch64/hpeldsp_init_aarch64.o
+OBJS-$(CONFIG_IMDCT15) += aarch64/imdct15_init.o
OBJS-$(CONFIG_MPEGAUDIODSP) += aarch64/mpegaudiodsp_init.o
OBJS-$(CONFIG_NEON_CLOBBER_TEST) += aarch64/neontest.o
OBJS-$(CONFIG_VIDEODSP) += aarch64/videodsp_init.o
-OBJS-$(CONFIG_OPUS_DECODER) += aarch64/opus_imdct_init.o
OBJS-$(CONFIG_RV40_DECODER) += aarch64/rv40dsp_init_aarch64.o
OBJS-$(CONFIG_VC1_DECODER) += aarch64/vc1dsp_init_aarch64.o
OBJS-$(CONFIG_VORBIS_DECODER) += aarch64/vorbisdsp_init.o
NEON-OBJS-$(CONFIG_H264QPEL) += aarch64/h264qpel_neon.o \
aarch64/hpeldsp_neon.o
NEON-OBJS-$(CONFIG_HPELDSP) += aarch64/hpeldsp_neon.o
+NEON-OBJS-$(CONFIG_IMDCT15) += aarch64/imdct15_neon.o
NEON-OBJS-$(CONFIG_MPEGAUDIODSP) += aarch64/mpegaudiodsp_neon.o
NEON-OBJS-$(CONFIG_MDCT) += aarch64/mdct_neon.o
-NEON-OBJS-$(CONFIG_OPUS_DECODER) += aarch64/opus_imdct_neon.o
NEON-OBJS-$(CONFIG_VORBIS_DECODER) += aarch64/vorbisdsp_neon.o
#include "libavutil/cpu.h"
#include "libavutil/aarch64/cpu.h"
#include "libavutil/internal.h"
-#include "libavcodec/opus_imdct.h"
+
+#include "libavcodec/imdct15.h"
#include "asm-offsets.h"
-AV_CHECK_OFFSET(CeltIMDCTContext, exptab, CELT_EXPTAB);
-AV_CHECK_OFFSET(CeltIMDCTContext, fft_n, CELT_FFT_N);
-AV_CHECK_OFFSET(CeltIMDCTContext, len2, CELT_LEN2);
-AV_CHECK_OFFSET(CeltIMDCTContext, len4, CELT_LEN4);
-AV_CHECK_OFFSET(CeltIMDCTContext, tmp, CELT_TMP);
-AV_CHECK_OFFSET(CeltIMDCTContext, twiddle_exptab, CELT_TWIDDLE);
+AV_CHECK_OFFSET(IMDCT15Context, exptab, CELT_EXPTAB);
+AV_CHECK_OFFSET(IMDCT15Context, fft_n, CELT_FFT_N);
+AV_CHECK_OFFSET(IMDCT15Context, len2, CELT_LEN2);
+AV_CHECK_OFFSET(IMDCT15Context, len4, CELT_LEN4);
+AV_CHECK_OFFSET(IMDCT15Context, tmp, CELT_TMP);
+AV_CHECK_OFFSET(IMDCT15Context, twiddle_exptab, CELT_TWIDDLE);
-void ff_celt_imdct_half_neon(CeltIMDCTContext *s, float *dst, const float *src,
+void ff_celt_imdct_half_neon(IMDCT15Context *s, float *dst, const float *src,
ptrdiff_t stride, float scale);
-void ff_celt_imdct_init_aarch64(CeltIMDCTContext *s)
+void ff_imdct15_init_aarch64(IMDCT15Context *s)
{
int cpu_flags = av_get_cpu_flags();
#include "libavutil/common.h"
#include "avfft.h"
+#include "imdct15.h"
#include "opus.h"
-#include "opus_imdct.h"
// minimal iMDCT size to make SIMD opts easier
#define CELT_MIN_IMDCT_SIZE 120
(d).im = -ri + ir; \
} while (0)
-av_cold void ff_celt_imdct_uninit(CeltIMDCTContext **ps)
+av_cold void ff_imdct15_uninit(IMDCT15Context **ps)
{
- CeltIMDCTContext *s = *ps;
+ IMDCT15Context *s = *ps;
int i;
if (!s)
av_freep(ps);
}
-static void celt_imdct_half(CeltIMDCTContext *s, float *dst, const float *src,
- ptrdiff_t stride, float scale);
+static void imdct15_half(IMDCT15Context *s, float *dst, const float *src,
+ ptrdiff_t stride, float scale);
-av_cold int ff_celt_imdct_init(CeltIMDCTContext **ps, int N)
+av_cold int ff_imdct15_init(IMDCT15Context **ps, int N)
{
- CeltIMDCTContext *s;
+ IMDCT15Context *s;
int len2 = 15 * (1 << N);
int len = 2 * len2;
int i, j;
for (j = 15; j < 19; j++)
s->exptab[0][j] = s->exptab[0][j - 15];
- s->imdct_half = celt_imdct_half;
+ s->imdct_half = imdct15_half;
if (ARCH_AARCH64)
- ff_celt_imdct_init_aarch64(s);
+ ff_imdct15_init_aarch64(s);
*ps = s;
return 0;
+
fail:
- ff_celt_imdct_uninit(&s);
+ ff_imdct15_uninit(&s);
return AVERROR(ENOMEM);
}
out[4].im = in[0].im + z[0][3].im + z[1][2].im + z[2][1].im + z[3][0].im;
}
-static void fft15(CeltIMDCTContext *s, FFTComplex *out, const FFTComplex *in, ptrdiff_t stride)
+static void fft15(IMDCT15Context *s, FFTComplex *out, const FFTComplex *in,
+ ptrdiff_t stride)
{
const FFTComplex *exptab = s->exptab[0];
FFTComplex tmp[5];
/*
* FFT of the length 15 * (2^N)
*/
-static void fft_calc(CeltIMDCTContext *s, FFTComplex *out, const FFTComplex *in,
+static void fft_calc(IMDCT15Context *s, FFTComplex *out, const FFTComplex *in,
int N, ptrdiff_t stride)
{
if (N) {
fft15(s, out, in, stride);
}
-static void celt_imdct_half(CeltIMDCTContext *s, float *dst, const float *src,
- ptrdiff_t stride, float scale)
+static void imdct15_half(IMDCT15Context *s, float *dst, const float *src,
+ ptrdiff_t stride, float scale)
{
FFTComplex *z = (FFTComplex *)dst;
const int len8 = s->len4 / 2;
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_OPUS_IMDCT_H
-#define AVCODEC_OPUS_IMDCT_H
+#ifndef AVCODEC_IMDCT15_H
+#define AVCODEC_IMDCT15_H
#include <stddef.h>
#include "avfft.h"
-typedef struct CeltIMDCTContext {
+typedef struct IMDCT15Context {
int fft_n;
int len2;
int len4;
/**
* Calculate the middle half of the iMDCT
*/
- void (*imdct_half)(struct CeltIMDCTContext *s, float *dst, const float *src,
+ void (*imdct_half)(struct IMDCT15Context *s, float *dst, const float *src,
ptrdiff_t src_stride, float scale);
-} CeltIMDCTContext;
+} IMDCT15Context;
/**
* Init an iMDCT of the length 2 * 15 * (2^N)
*/
-int ff_celt_imdct_init(CeltIMDCTContext **s, int N);
+int ff_imdct15_init(IMDCT15Context **s, int N);
/**
* Free an iMDCT.
*/
-void ff_celt_imdct_uninit(CeltIMDCTContext **s);
+void ff_imdct15_uninit(IMDCT15Context **s);
-void ff_celt_imdct_init_aarch64(CeltIMDCTContext *s);
+void ff_imdct15_init_aarch64(IMDCT15Context *s);
-#endif /* AVCODEC_OPUS_IMDCT_H */
+#endif /* AVCODEC_IMDCT15_H */
#include "libavutil/float_dsp.h"
+#include "imdct15.h"
#include "opus.h"
-#include "opus_imdct.h"
enum CeltSpread {
CELT_SPREAD_NONE,
struct CeltContext {
// constant values that do not change during context lifetime
AVCodecContext *avctx;
- CeltIMDCTContext *imdct[4];
+ IMDCT15Context *imdct[4];
AVFloatDSPContext dsp;
int output_channels;
int silence = 0;
int transient = 0;
int anticollapse = 0;
- CeltIMDCTContext *imdct;
+ IMDCT15Context *imdct;
float imdct_scale = 1.0;
if (coded_channels != 1 && coded_channels != 2) {
return;
for (i = 0; i < FF_ARRAY_ELEMS(s->imdct); i++)
- ff_celt_imdct_uninit(&s->imdct[i]);
+ ff_imdct15_uninit(&s->imdct[i]);
av_freep(ps);
}
s->output_channels = output_channels;
for (i = 0; i < FF_ARRAY_ELEMS(s->imdct); i++) {
- ret = ff_celt_imdct_init(&s->imdct[i], i + 3);
+ ret = ff_imdct15_init(&s->imdct[i], i + 3);
if (ret < 0)
goto fail;
}