Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
0
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;
}