"Fossies" - the Fresh Open Source Software Archive

Member "ffmpeg-3.4.2/libavcodec/aacenc.h" (12 Feb 2018, 6008 Bytes) of package /linux/misc/ffmpeg-3.4.2.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "aacenc.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 3.3.4_vs_3.4.

    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 "libavutil/float_dsp.h"
   26 #include "avcodec.h"
   27 #include "put_bits.h"
   28 
   29 #include "aac.h"
   30 #include "audio_frame_queue.h"
   31 #include "psymodel.h"
   32 
   33 #include "lpc.h"
   34 
   35 typedef enum AACCoder {
   36     AAC_CODER_ANMR = 0,
   37     AAC_CODER_TWOLOOP,
   38     AAC_CODER_FAST,
   39 
   40     AAC_CODER_NB,
   41 }AACCoder;
   42 
   43 typedef struct AACEncOptions {
   44     int coder;
   45     int pns;
   46     int tns;
   47     int ltp;
   48     int pred;
   49     int mid_side;
   50     int intensity_stereo;
   51 } AACEncOptions;
   52 
   53 struct AACEncContext;
   54 
   55 typedef struct AACCoefficientsEncoder {
   56     void (*search_for_quantizers)(AVCodecContext *avctx, struct AACEncContext *s,
   57                                   SingleChannelElement *sce, const float lambda);
   58     void (*encode_window_bands_info)(struct AACEncContext *s, SingleChannelElement *sce,
   59                                      int win, int group_len, const float lambda);
   60     void (*quantize_and_encode_band)(struct AACEncContext *s, PutBitContext *pb, const float *in, float *out, int size,
   61                                      int scale_idx, int cb, const float lambda, int rtz);
   62     void (*encode_tns_info)(struct AACEncContext *s, SingleChannelElement *sce);
   63     void (*encode_ltp_info)(struct AACEncContext *s, SingleChannelElement *sce, int common_window);
   64     void (*encode_main_pred)(struct AACEncContext *s, SingleChannelElement *sce);
   65     void (*adjust_common_pred)(struct AACEncContext *s, ChannelElement *cpe);
   66     void (*adjust_common_ltp)(struct AACEncContext *s, ChannelElement *cpe);
   67     void (*apply_main_pred)(struct AACEncContext *s, SingleChannelElement *sce);
   68     void (*apply_tns_filt)(struct AACEncContext *s, SingleChannelElement *sce);
   69     void (*update_ltp)(struct AACEncContext *s, SingleChannelElement *sce);
   70     void (*ltp_insert_new_frame)(struct AACEncContext *s);
   71     void (*set_special_band_scalefactors)(struct AACEncContext *s, SingleChannelElement *sce);
   72     void (*search_for_pns)(struct AACEncContext *s, AVCodecContext *avctx, SingleChannelElement *sce);
   73     void (*mark_pns)(struct AACEncContext *s, AVCodecContext *avctx, SingleChannelElement *sce);
   74     void (*search_for_tns)(struct AACEncContext *s, SingleChannelElement *sce);
   75     void (*search_for_ltp)(struct AACEncContext *s, SingleChannelElement *sce, int common_window);
   76     void (*search_for_ms)(struct AACEncContext *s, ChannelElement *cpe);
   77     void (*search_for_is)(struct AACEncContext *s, AVCodecContext *avctx, ChannelElement *cpe);
   78     void (*search_for_pred)(struct AACEncContext *s, SingleChannelElement *sce);
   79 } AACCoefficientsEncoder;
   80 
   81 extern const AACCoefficientsEncoder ff_aac_coders[];
   82 
   83 typedef struct AACQuantizeBandCostCacheEntry {
   84     float rd;
   85     float energy;
   86     int bits;
   87     char cb;
   88     char rtz;
   89     uint16_t generation;
   90 } AACQuantizeBandCostCacheEntry;
   91 
   92 /**
   93  * AAC encoder context
   94  */
   95 typedef struct AACEncContext {
   96     AVClass *av_class;
   97     AACEncOptions options;                       ///< encoding options
   98     PutBitContext pb;
   99     FFTContext mdct1024;                         ///< long (1024 samples) frame transform context
  100     FFTContext mdct128;                          ///< short (128 samples) frame transform context
  101     AVFloatDSPContext *fdsp;
  102     float *planar_samples[8];                    ///< saved preprocessed input
  103 
  104     int profile;                                 ///< copied from avctx
  105     LPCContext lpc;                              ///< used by TNS
  106     int samplerate_index;                        ///< MPEG-4 samplerate index
  107     int channels;                                ///< channel count
  108     const uint8_t *chan_map;                     ///< channel configuration map
  109 
  110     ChannelElement *cpe;                         ///< channel elements
  111     FFPsyContext psy;
  112     struct FFPsyPreprocessContext* psypp;
  113     const AACCoefficientsEncoder *coder;
  114     int cur_channel;                             ///< current channel for coder context
  115     int random_state;
  116     float lambda;
  117     int last_frame_pb_count;                     ///< number of bits for the previous frame
  118     float lambda_sum;                            ///< sum(lambda), for Qvg reporting
  119     int lambda_count;                            ///< count(lambda), for Qvg reporting
  120     enum RawDataBlockType cur_type;              ///< channel group type cur_channel belongs to
  121 
  122     AudioFrameQueue afq;
  123     DECLARE_ALIGNED(16, int,   qcoefs)[96];      ///< quantized coefficients
  124     DECLARE_ALIGNED(32, float, scoefs)[1024];    ///< scaled coefficients
  125 
  126     uint16_t quantize_band_cost_cache_generation;
  127     AACQuantizeBandCostCacheEntry quantize_band_cost_cache[256][128]; ///< memoization area for quantize_band_cost
  128 
  129     void (*abs_pow34)(float *out, const float *in, const int size);
  130     void (*quant_bands)(int *out, const float *in, const float *scaled,
  131                         int size, int is_signed, int maxval, const float Q34,
  132                         const float rounding);
  133 
  134     struct {
  135         float *samples;
  136     } buffer;
  137 } AACEncContext;
  138 
  139 void ff_aac_dsp_init_x86(AACEncContext *s);
  140 void ff_aac_coder_init_mips(AACEncContext *c);
  141 void ff_quantize_band_cost_cache_init(struct AACEncContext *s);
  142 
  143 
  144 #endif /* AVCODEC_AACENC_H */