# HG changeset patch # User kostya # Date 1219557383 0 # Node ID bcc058a7b12eebd0fd48093495c6e7de364de457 # Parent eb4802bc73f0fe12e2ae110259a42de5469d6496 okayed chunks of AAC encoder diff -r eb4802bc73f0 -r bcc058a7b12e aacenc.c --- a/aacenc.c Sun Aug 24 05:47:45 2008 +0000 +++ b/aacenc.c Sun Aug 24 05:56:23 2008 +0000 @@ -28,6 +28,7 @@ * TODOs: * psy model selection with some option * add sane pulse detection + * add temporal noise shaping ***********************************/ #include "avcodec.h" @@ -211,10 +212,6 @@ return -1; } s->samplerate_index = i; - s->swb_sizes1024 = swb_size_1024[i]; - s->swb_num1024 = ff_aac_num_swb_1024[i]; - s->swb_sizes128 = swb_size_128[i]; - s->swb_num128 = ff_aac_num_swb_128[i]; dsputil_init(&s->dsp, avctx); ff_mdct_init(&s->mdct1024, 11, 0); @@ -229,7 +226,7 @@ s->cpe = av_mallocz(sizeof(ChannelElement) * aac_chan_configs[avctx->channels-1][0]); if(ff_aac_psy_init(&s->psy, avctx, AAC_PSY_3GPP, aac_chan_configs[avctx->channels-1][0], 0, - s->swb_sizes1024, s->swb_num1024, s->swb_sizes128, s->swb_num128) < 0){ + swb_size_1024[i], ff_aac_num_swb_1024[i], swb_size_128[i], ff_aac_num_swb_128[i]) < 0){ av_log(avctx, AV_LOG_ERROR, "Cannot initialize selected model.\n"); return -1; } @@ -243,9 +240,8 @@ * Encode ics_info element. * @see Table 4.6 (syntax of ics_info) */ -static void put_ics_info(AVCodecContext *avctx, IndividualChannelStream *info) +static void put_ics_info(AACEncContext *s, IndividualChannelStream *info) { - AACEncContext *s = avctx->priv_data; int i; put_bits(&s->pb, 1, 0); // ics_reserved bit @@ -262,6 +258,24 @@ } /** + * Calculate the number of bits needed to code all coefficient signs in current band. + */ +static int calculate_band_sign_bits(AACEncContext *s, SingleChannelElement *sce, + int group_len, int start, int size) +{ + int bits = 0; + int i, w; + for(w = 0; w < group_len; w++){ + for(i = 0; i < size; i++){ + if(sce->icoefs[start + i]) + bits++; + } + start += 128; + } + return bits; +} + +/** * Encode pulse data. */ static void encode_pulses(AACEncContext *s, Pulse *pulse) @@ -295,7 +309,7 @@ continue; } for(w2 = w; w2 < w + sce->ics.group_len[wg]; w2++){ - encode_band_coeffs(s, cpe, channel, start + w2*128, + encode_band_coeffs(s, sce, start + w2*128, sce->ics.swb_sizes[i], sce->band_type[w*16 + i]); }