1/* 2 * AAC encoder 3 * Copyright (C) 2008 Konstantin Shishkov 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#ifndef AVCODEC_AACENC_H 23#define AVCODEC_AACENC_H 24 25#include "avcodec.h" 26#include "put_bits.h" 27#include "dsputil.h" 28 29#include "aac.h" 30 31#include "psymodel.h" 32 33struct AACEncContext; 34 35typedef struct AACCoefficientsEncoder { 36 void (*search_for_quantizers)(AVCodecContext *avctx, struct AACEncContext *s, 37 SingleChannelElement *sce, const float lambda); 38 void (*encode_window_bands_info)(struct AACEncContext *s, SingleChannelElement *sce, 39 int win, int group_len, const float lambda); 40 void (*quantize_and_encode_band)(struct AACEncContext *s, PutBitContext *pb, const float *in, int size, 41 int scale_idx, int cb, const float lambda); 42 void (*search_for_ms)(struct AACEncContext *s, ChannelElement *cpe, const float lambda); 43} AACCoefficientsEncoder; 44 45extern AACCoefficientsEncoder ff_aac_coders[]; 46 47/** 48 * AAC encoder context 49 */ 50typedef struct AACEncContext { 51 PutBitContext pb; 52 FFTContext mdct1024; ///< long (1024 samples) frame transform context 53 FFTContext mdct128; ///< short (128 samples) frame transform context 54 DSPContext dsp; 55 DECLARE_ALIGNED(16, FFTSample, output)[2048]; ///< temporary buffer for MDCT input coefficients 56 int16_t* samples; ///< saved preprocessed input 57 58 int samplerate_index; ///< MPEG-4 samplerate index 59 60 ChannelElement *cpe; ///< channel elements 61 FFPsyContext psy; 62 struct FFPsyPreprocessContext* psypp; 63 AACCoefficientsEncoder *coder; 64 int cur_channel; 65 int last_frame; 66 float lambda; 67 DECLARE_ALIGNED(16, int, qcoefs)[96][2]; ///< quantized coefficients 68 DECLARE_ALIGNED(16, float, scoefs)[1024]; ///< scaled coefficients 69} AACEncContext; 70 71#endif /* AVCODEC_AACENC_H */ 72