int VBR_noise_shaping(lame_internal_flags * gfc, const FLOAT8 * xr34orig, int minbits, int maxbits, const III_psy_xmin * l3_xmin, int gr, int ch) { FLOAT8 xr34[576]; int ret, bits, huffbits; gr_info *cod_info = &gfc->l3_side.tt[gr][ch]; switch (cod_info->block_type) { default: ret = long_block_shaping(gfc, xr34orig, xr34, minbits, maxbits, l3_xmin, gr, ch); break; case SHORT_TYPE: ret = short_block_shaping(gfc, xr34orig, xr34, minbits, maxbits, l3_xmin, gr, ch); break; } if (ret == -1) /* Houston, we have a problem */ return -1; if (cod_info->part2_3_length < minbits) { huffbits = minbits - cod_info->part2_length; bits = bin_search_StepSize(gfc, cod_info, huffbits, gfc->OldValue[ch], xr34); gfc->OldValue[ch] = cod_info->global_gain; cod_info->part2_3_length = bits + cod_info->part2_length; if (gfc->use_best_huffman == 1) { best_huffman_divide(gfc, cod_info); } } if (cod_info->part2_3_length > maxbits) { huffbits = maxbits - cod_info->part2_length; if (huffbits < 0) huffbits = 0; bits = bin_search_StepSize(gfc, cod_info, huffbits, gfc->OldValue[ch], xr34); gfc->OldValue[ch] = cod_info->global_gain; while (bits > huffbits) { ++cod_info->global_gain; bits = count_bits(gfc, cod_info->l3_enc, xr34, cod_info); } cod_info->part2_3_length = bits; if (bits >= LARGE_BITS) /* Houston, we have a problem */ return -2; cod_info->part2_3_length += cod_info->part2_length; if (gfc->use_best_huffman == 1) { best_huffman_divide(gfc, cod_info); } } if (cod_info->part2_length >= LARGE_BITS) /* Houston, we have a problem */ return -2; assert(cod_info->global_gain < 256); return 0; }
int shine_outer_loop( int max_bits, shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */ int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */ int gr, int ch, shine_global_config *config) { int bits, huff_bits; shine_side_info_t *side_info = &config->side_info; gr_info *cod_info = &side_info->gr[gr].ch[ch].tt; cod_info->quantizerStepSize = bin_search_StepSize(max_bits,ix,cod_info, config); cod_info->part2_length = part2_length(gr,ch,config); huff_bits = max_bits - cod_info->part2_length; bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config ); cod_info->part2_3_length = cod_info->part2_length + bits; return cod_info->part2_3_length; }
static int outer_loop( int max_bits, L3_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */ int ix[samp_per_frame2], /* vector of quantized values ix(0..575) */ L3_scalefac_t *scalefac, /* scalefactors */ int gr, int ch, L3_side_info_t *side_info ) { int bits, huff_bits; gr_info *cod_info = &side_info->gr[gr].ch[ch].tt; cod_info->quantizerStepSize = bin_search_StepSize(max_bits,ix,cod_info); cod_info->part2_length = part2_length(scalefac,gr,ch,side_info); huff_bits = max_bits - cod_info->part2_length; bits = inner_loop(ix, huff_bits, cod_info, gr, ch ); cod_info->part2_length = part2_length(scalefac,gr,ch,side_info); cod_info->part2_3_length = cod_info->part2_length + bits; return cod_info->part2_3_length; }