1/* 2 * AAC encoder 3 * Copyright (C) 2008 Konstantin Shishkov 4 * 5 * This file is part of Libav. 6 * 7 * Libav 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 * Libav 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 Libav; 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 33typedef struct AACEncOptions { 34 int stereo_mode; 35} AACEncOptions; 36 37struct AACEncContext; 38 39typedef struct AACCoefficientsEncoder { 40 void (*search_for_quantizers)(AVCodecContext *avctx, struct AACEncContext *s, 41 SingleChannelElement *sce, const float lambda); 42 void (*encode_window_bands_info)(struct AACEncContext *s, SingleChannelElement *sce, 43 int win, int group_len, const float lambda); 44 void (*quantize_and_encode_band)(struct AACEncContext *s, PutBitContext *pb, const float *in, int size, 45 int scale_idx, int cb, const float lambda); 46 void (*search_for_ms)(struct AACEncContext *s, ChannelElement *cpe, const float lambda); 47} AACCoefficientsEncoder; 48 49extern AACCoefficientsEncoder ff_aac_coders[]; 50 51/** 52 * AAC encoder context 53 */ 54typedef struct AACEncContext { 55 AVClass *av_class; 56 AACEncOptions options; ///< encoding options 57 PutBitContext pb; 58 FFTContext mdct1024; ///< long (1024 samples) frame transform context 59 FFTContext mdct128; ///< short (128 samples) frame transform context 60 DSPContext dsp; 61 int16_t *samples; ///< saved preprocessed input 62 63 int samplerate_index; ///< MPEG-4 samplerate index 64 const uint8_t *chan_map; ///< channel configuration map 65 66 ChannelElement *cpe; ///< channel elements 67 FFPsyContext psy; 68 struct FFPsyPreprocessContext* psypp; 69 AACCoefficientsEncoder *coder; 70 int cur_channel; 71 int last_frame; 72 float lambda; 73 DECLARE_ALIGNED(16, int, qcoefs)[96]; ///< quantized coefficients 74 DECLARE_ALIGNED(32, float, scoefs)[1024]; ///< scaled coefficients 75} AACEncContext; 76 77#endif /* AVCODEC_AACENC_H */ 78