Blame libmp3lame/presets.c

Packit 47f805
/*
Packit 47f805
 * presets.c -- Apply presets
Packit 47f805
 *
Packit 47f805
 *	Copyright (c) 2002-2008 Gabriel Bouvigne
Packit 47f805
 *	Copyright (c) 2007-2012 Robert Hegemann
Packit 47f805
 *
Packit 47f805
 * This library is free software; you can redistribute it and/or
Packit 47f805
 * modify it under the terms of the GNU Library General Public
Packit 47f805
 * License as published by the Free Software Foundation; either
Packit 47f805
 * version 2 of the License, or (at your option) any later version.
Packit 47f805
 *
Packit 47f805
 * This library is distributed in the hope that it will be useful,
Packit 47f805
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47f805
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 47f805
 * Library General Public License for more details.
Packit 47f805
 *
Packit 47f805
 * You should have received a copy of the GNU Library General Public
Packit 47f805
 * License along with this library; if not, write to the Free Software
Packit 47f805
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Packit 47f805
 */
Packit 47f805
Packit 47f805
Packit 47f805
#ifdef HAVE_CONFIG_H
Packit 47f805
# include <config.h>
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#include "lame.h"
Packit 47f805
#include "machine.h"
Packit 47f805
#include "set_get.h"
Packit 47f805
#include "encoder.h"
Packit 47f805
#include "util.h"
Packit 47f805
#include "lame_global_flags.h"
Packit 47f805
Packit 47f805
#define SET_OPTION(opt, val, def) if (enforce) \
Packit 47f805
    (void) lame_set_##opt(gfp, val); \
Packit 47f805
    else if (!(fabs(lame_get_##opt(gfp) - def) > 0)) \
Packit 47f805
    (void) lame_set_##opt(gfp, val);
Packit 47f805
Packit 47f805
#define SET__OPTION(opt, val, def) if (enforce) \
Packit 47f805
    lame_set_##opt(gfp, val); \
Packit 47f805
    else if (!(fabs(lame_get_##opt(gfp) - def) > 0)) \
Packit 47f805
    lame_set_##opt(gfp, val);
Packit 47f805
Packit 47f805
#undef Min
Packit 47f805
#undef Max
Packit 47f805
Packit 47f805
static inline int
Packit 47f805
min_int(int a, int b)
Packit 47f805
{
Packit 47f805
    if (a < b) {
Packit 47f805
        return a;
Packit 47f805
    }
Packit 47f805
    return b;
Packit 47f805
}
Packit 47f805
Packit 47f805
static inline int
Packit 47f805
max_int(int a, int b)
Packit 47f805
{
Packit 47f805
    if (a > b) {
Packit 47f805
        return a;
Packit 47f805
    }
Packit 47f805
    return b;
Packit 47f805
}
Packit 47f805
Packit 47f805
Packit 47f805
Packit 47f805
typedef struct {
Packit 47f805
    int     vbr_q;
Packit 47f805
    int     quant_comp;
Packit 47f805
    int     quant_comp_s;
Packit 47f805
    int     expY;
Packit 47f805
    FLOAT   st_lrm;          /*short threshold */
Packit 47f805
    FLOAT   st_s;
Packit 47f805
    FLOAT   masking_adj;
Packit 47f805
    FLOAT   masking_adj_short;
Packit 47f805
    FLOAT   ath_lower;
Packit 47f805
    FLOAT   ath_curve;
Packit 47f805
    FLOAT   ath_sensitivity;
Packit 47f805
    FLOAT   interch;
Packit 47f805
    int     safejoint;
Packit 47f805
    int     sfb21mod;
Packit 47f805
    FLOAT   msfix;
Packit 47f805
    FLOAT   minval;
Packit 47f805
    FLOAT   ath_fixpoint;
Packit 47f805
} vbr_presets_t;
Packit 47f805
Packit 47f805
    /* *INDENT-OFF* */
Packit 47f805
    
Packit 47f805
    /* Switch mappings for VBR mode VBR_RH */
Packit 47f805
    static const vbr_presets_t vbr_old_switch_map[] = {
Packit 47f805
    /*vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix */
Packit 47f805
        {0,       9,       9,    0,   5.20, 125.0,      -4.2,   -6.3,       4.8,       1,          0,   0,              2,      21,  0.97, 5, 100},
Packit 47f805
        {1,       9,       9,    0,   5.30, 125.0,      -3.6,   -5.6,       4.5,       1.5,        0,   0,              2,      21,  1.35, 5, 100},
Packit 47f805
        {2,       9,       9,    0,   5.60, 125.0,      -2.2,   -3.5,       2.8,       2,          0,   0,              2,      21,  1.49, 5, 100},
Packit 47f805
        {3,       9,       9,    1,   5.80, 130.0,      -1.8,   -2.8,       2.6,       3,         -4,   0,              2,      20,  1.64, 5, 100},
Packit 47f805
        {4,       9,       9,    1,   6.00, 135.0,      -0.7,   -1.1,       1.1,       3.5,       -8,   0,              2,       0,  1.79, 5, 100},
Packit 47f805
        {5,       9,       9,    1,   6.40, 140.0,       0.5,    0.4,      -7.5,       4,        -12,   0.0002,         0,       0,  1.95, 5, 100},
Packit 47f805
        {6,       9,       9,    1,   6.60, 145.0,       0.67,   0.65,    -14.7,       6.5,      -19,   0.0004,         0,       0,  2.30, 5, 100},
Packit 47f805
        {7,       9,       9,    1,   6.60, 145.0,       0.8,    0.75,    -19.7,       8,        -22,   0.0006,         0,       0,  2.70, 5, 100},
Packit 47f805
        {8,       9,       9,    1,   6.60, 145.0,       1.2,    1.15,    -27.5,      10,        -23,   0.0007,         0,       0,  0,    5, 100},
Packit 47f805
        {9,       9,       9,    1,   6.60, 145.0,       1.6,    1.6,     -36,        11,        -25,   0.0008,         0,       0,  0,    5, 100},
Packit 47f805
        {10,      9,       9,    1,   6.60, 145.0,       2.0,    2.0,     -36,        12,        -25,   0.0008,         0,       0,  0,    5, 100}
Packit 47f805
    };
Packit 47f805
    
Packit 47f805
    static const vbr_presets_t vbr_mt_psy_switch_map[] = {
Packit 47f805
    /*vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  ---  safejoint sfb21mod  msfix */
Packit 47f805
        {0,       9,       9,    0,   4.20,  25.0,      -6.8,   -6.8,       7.1,       1,          0,   0,         2,      31,  1.000,  5, 100},
Packit 47f805
        {1,       9,       9,    0,   4.20,  25.0,      -4.8,   -4.8,       5.4,       1.4,       -1,   0,         2,      27,  1.122,  5,  98},
Packit 47f805
        {2,       9,       9,    0,   4.20,  25.0,      -2.6,   -2.6,       3.7,       2.0,       -3,   0,         2,      23,  1.288,  5,  97},
Packit 47f805
        {3,       9,       9,    1,   4.20,  25.0,      -1.6,   -1.6,       2.0,       2.0,       -5,   0,         2,      18,  1.479,  5,  96},
Packit 47f805
        {4,       9,       9,    1,   4.20,  25.0,      -0.0,   -0.0,       0.0,       2.0,       -8,   0,         2,      12,  1.698,  5,  95},
Packit 47f805
        {5,       9,       9,    1,   4.20,  25.0,       1.3,    1.3,      -6,         3.5,      -11,   0,         2,       8,  1.950,  5,  94.2},
Packit 47f805
#if 0
Packit 47f805
        {6,       9,       9,    1,   4.50, 100.0,       1.5,    1.5,     -24.0,       6.0,      -14,   0,         2,       4,  2.239,  3,  93.9},
Packit 47f805
        {7,       9,       9,    1,   4.80, 200.0,       1.7,    1.7,     -28.0,       9.0,      -20,   0,         2,       0,  2.570,  1,  93.6},
Packit 47f805
#else
Packit 47f805
        {6,       9,       9,    1,   4.50, 100.0,       2.2,    2.3,     -12.0,       6.0,      -14,   0,         2,       4,  2.239,  3,  93.9},
Packit 47f805
        {7,       9,       9,    1,   4.80, 200.0,       2.7,    2.7,     -18.0,       9.0,      -17,   0,         2,       0,  2.570,  1,  93.6},
Packit 47f805
#endif
Packit 47f805
        {8,       9,       9,    1,   5.30, 300.0,       2.8,    2.8,     -21.0,      10.0,      -23,   0.0002,    0,       0,  2.951,  0,  93.3},
Packit 47f805
        {9,       9,       9,    1,   6.60, 300.0,       2.8,    2.8,     -23.0,      11.0,      -25,   0.0006,    0,       0,  3.388,  0,  93.3},
Packit 47f805
        {10,      9,       9,    1,  25.00, 300.0,       2.8,    2.8,     -25.0,      12.0,      -27,   0.0025,    0,       0,  3.500,  0,  93.3}
Packit 47f805
    };
Packit 47f805
Packit 47f805
    /* *INDENT-ON* */
Packit 47f805
Packit 47f805
static vbr_presets_t const*
Packit 47f805
get_vbr_preset(int v)
Packit 47f805
{
Packit 47f805
    switch (v) {
Packit 47f805
    case vbr_mtrh:
Packit 47f805
    case vbr_mt:
Packit 47f805
        return &vbr_mt_psy_switch_map[0];
Packit 47f805
    default:
Packit 47f805
        return &vbr_old_switch_map[0];
Packit 47f805
    }
Packit 47f805
}
Packit 47f805
Packit 47f805
#define NOOP(m) (void)p.m
Packit 47f805
#define LERP(m) (p.m = p.m + x * (q.m - p.m))
Packit 47f805
Packit 47f805
static void
Packit 47f805
apply_vbr_preset(lame_global_flags * gfp, int a, int enforce)
Packit 47f805
{
Packit 47f805
    vbr_presets_t const *vbr_preset = get_vbr_preset(lame_get_VBR(gfp));
Packit 47f805
    float   x = gfp->VBR_q_frac;
Packit 47f805
    vbr_presets_t p = vbr_preset[a];
Packit 47f805
    vbr_presets_t q = vbr_preset[a + 1];
Packit 47f805
    vbr_presets_t const *set = &p;
Packit 47f805
Packit 47f805
    NOOP(vbr_q);
Packit 47f805
    NOOP(quant_comp);
Packit 47f805
    NOOP(quant_comp_s);
Packit 47f805
    NOOP(expY);
Packit 47f805
    LERP(st_lrm);
Packit 47f805
    LERP(st_s);
Packit 47f805
    LERP(masking_adj);
Packit 47f805
    LERP(masking_adj_short);
Packit 47f805
    LERP(ath_lower);
Packit 47f805
    LERP(ath_curve);
Packit 47f805
    LERP(ath_sensitivity);
Packit 47f805
    LERP(interch);
Packit 47f805
    NOOP(safejoint);
Packit 47f805
    LERP(sfb21mod);
Packit 47f805
    LERP(msfix);
Packit 47f805
    LERP(minval);
Packit 47f805
    LERP(ath_fixpoint);
Packit 47f805
Packit 47f805
    (void) lame_set_VBR_q(gfp, set->vbr_q);
Packit 47f805
    SET_OPTION(quant_comp, set->quant_comp, -1);
Packit 47f805
    SET_OPTION(quant_comp_short, set->quant_comp_s, -1);
Packit 47f805
    if (set->expY) {
Packit 47f805
        (void) lame_set_experimentalY(gfp, set->expY);
Packit 47f805
    }
Packit 47f805
    SET_OPTION(short_threshold_lrm, set->st_lrm, -1);
Packit 47f805
    SET_OPTION(short_threshold_s, set->st_s, -1);
Packit 47f805
    SET_OPTION(maskingadjust, set->masking_adj, 0);
Packit 47f805
    SET_OPTION(maskingadjust_short, set->masking_adj_short, 0);
Packit 47f805
    if (lame_get_VBR(gfp) == vbr_mt || lame_get_VBR(gfp) == vbr_mtrh) {
Packit 47f805
        lame_set_ATHtype(gfp, 5);
Packit 47f805
    }
Packit 47f805
    SET_OPTION(ATHlower, set->ath_lower, 0);
Packit 47f805
    SET_OPTION(ATHcurve, set->ath_curve, -1);
Packit 47f805
    SET_OPTION(athaa_sensitivity, set->ath_sensitivity, 0);
Packit 47f805
    if (set->interch > 0) {
Packit 47f805
        SET_OPTION(interChRatio, set->interch, -1);
Packit 47f805
    }
Packit 47f805
Packit 47f805
    /* parameters for which there is no proper set/get interface */
Packit 47f805
    if (set->safejoint > 0) {
Packit 47f805
        (void) lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 2);
Packit 47f805
    }
Packit 47f805
    if (set->sfb21mod > 0) {
Packit 47f805
        int const nsp = lame_get_exp_nspsytune(gfp);
Packit 47f805
        int const val = (nsp >> 20) & 63;
Packit 47f805
        if (val == 0) {
Packit 47f805
            int const sf21mod = (set->sfb21mod << 20) | nsp;
Packit 47f805
            (void) lame_set_exp_nspsytune(gfp, sf21mod);
Packit 47f805
        }
Packit 47f805
    }
Packit 47f805
    SET__OPTION(msfix, set->msfix, -1);
Packit 47f805
Packit 47f805
    if (enforce == 0) {
Packit 47f805
        gfp->VBR_q = a;
Packit 47f805
        gfp->VBR_q_frac = x;
Packit 47f805
    }
Packit 47f805
    gfp->internal_flags->cfg.minval = set->minval;
Packit 47f805
    {   /* take care of gain adjustments */
Packit 47f805
        double const x = fabs(gfp->scale);
Packit 47f805
        double const y = (x > 0.f) ? (10.f * log10(x)) : 0.f;
Packit 47f805
        gfp->internal_flags->cfg.ATHfixpoint = set->ath_fixpoint - y;
Packit 47f805
    }
Packit 47f805
}
Packit 47f805
Packit 47f805
static int
Packit 47f805
apply_abr_preset(lame_global_flags * gfp, int preset, int enforce)
Packit 47f805
{
Packit 47f805
    typedef struct {
Packit 47f805
        int     abr_kbps;
Packit 47f805
        int     quant_comp;
Packit 47f805
        int     quant_comp_s;
Packit 47f805
        int     safejoint;
Packit 47f805
        FLOAT   nsmsfix;
Packit 47f805
        FLOAT   st_lrm;      /*short threshold */
Packit 47f805
        FLOAT   st_s;
Packit 47f805
        FLOAT   scale;
Packit 47f805
        FLOAT   masking_adj;
Packit 47f805
        FLOAT   ath_lower;
Packit 47f805
        FLOAT   ath_curve;
Packit 47f805
        FLOAT   interch;
Packit 47f805
        int     sfscale;
Packit 47f805
    } abr_presets_t;
Packit 47f805
Packit 47f805
Packit 47f805
    /* *INDENT-OFF* */
Packit 47f805
Packit 47f805
    /* 
Packit 47f805
     *  Switch mappings for ABR mode
Packit 47f805
     */
Packit 47f805
    const abr_presets_t abr_switch_map[] = {        
Packit 47f805
    /* kbps  quant q_s safejoint nsmsfix st_lrm  st_s  scale   msk ath_lwr ath_curve  interch , sfscale */
Packit 47f805
      {  8,     9,  9,        0,      0,  6.60,  145,  0.95,    0,  -30.0,     11,    0.0012,        1}, /*   8, impossible to use in stereo */
Packit 47f805
      { 16,     9,  9,        0,      0,  6.60,  145,  0.95,    0,  -25.0,     11,    0.0010,        1}, /*  16 */
Packit 47f805
      { 24,     9,  9,        0,      0,  6.60,  145,  0.95,    0,  -20.0,     11,    0.0010,        1}, /*  24 */
Packit 47f805
      { 32,     9,  9,        0,      0,  6.60,  145,  0.95,    0,  -15.0,     11,    0.0010,        1}, /*  32 */
Packit 47f805
      { 40,     9,  9,        0,      0,  6.60,  145,  0.95,    0,  -10.0,     11,    0.0009,        1}, /*  40 */
Packit 47f805
      { 48,     9,  9,        0,      0,  6.60,  145,  0.95,    0,  -10.0,     11,    0.0009,        1}, /*  48 */
Packit 47f805
      { 56,     9,  9,        0,      0,  6.60,  145,  0.95,    0,   -6.0,     11,    0.0008,        1}, /*  56 */
Packit 47f805
      { 64,     9,  9,        0,      0,  6.60,  145,  0.95,    0,   -2.0,     11,    0.0008,        1}, /*  64 */
Packit 47f805
      { 80,     9,  9,        0,      0,  6.60,  145,  0.95,    0,     .0,      8,    0.0007,        1}, /*  80 */
Packit 47f805
      { 96,     9,  9,        0,   2.50,  6.60,  145,  0.95,    0,    1.0,      5.5,  0.0006,        1}, /*  96 */
Packit 47f805
      {112,     9,  9,        0,   2.25,  6.60,  145,  0.95,    0,    2.0,      4.5,  0.0005,        1}, /* 112 */
Packit 47f805
      {128,     9,  9,        0,   1.95,  6.40,  140,  0.95,    0,    3.0,      4,    0.0002,        1}, /* 128 */
Packit 47f805
      {160,     9,  9,        1,   1.79,  6.00,  135,  0.95,   -2,    5.0,      3.5,  0,             1}, /* 160 */
Packit 47f805
      {192,     9,  9,        1,   1.49,  5.60,  125,  0.97,   -4,    7.0,      3,    0,             0}, /* 192 */
Packit 47f805
      {224,     9,  9,        1,   1.25,  5.20,  125,  0.98,   -6,    9.0,      2,    0,             0}, /* 224 */
Packit 47f805
      {256,     9,  9,        1,   0.97,  5.20,  125,  1.00,   -8,   10.0,      1,    0,             0}, /* 256 */
Packit 47f805
      {320,     9,  9,        1,   0.90,  5.20,  125,  1.00,  -10,   12.0,      0,    0,             0}  /* 320 */
Packit 47f805
    };
Packit 47f805
Packit 47f805
    /* *INDENT-ON* */
Packit 47f805
Packit 47f805
    /* Variables for the ABR stuff */
Packit 47f805
    int     r;
Packit 47f805
    int     actual_bitrate = preset;
Packit 47f805
Packit 47f805
    r = nearestBitrateFullIndex(preset);
Packit 47f805
    
Packit 47f805
    (void) lame_set_VBR(gfp, vbr_abr);
Packit 47f805
    (void) lame_set_VBR_mean_bitrate_kbps(gfp, (actual_bitrate));
Packit 47f805
    (void) lame_set_VBR_mean_bitrate_kbps(gfp, min_int(lame_get_VBR_mean_bitrate_kbps(gfp), 320));
Packit 47f805
    (void) lame_set_VBR_mean_bitrate_kbps(gfp, max_int(lame_get_VBR_mean_bitrate_kbps(gfp), 8));
Packit 47f805
    (void) lame_set_brate(gfp, lame_get_VBR_mean_bitrate_kbps(gfp));
Packit 47f805
Packit 47f805
Packit 47f805
    /* parameters for which there is no proper set/get interface */
Packit 47f805
    if (abr_switch_map[r].safejoint > 0)
Packit 47f805
        (void) lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 2); /* safejoint */
Packit 47f805
Packit 47f805
    if (abr_switch_map[r].sfscale > 0)
Packit 47f805
        (void) lame_set_sfscale(gfp, 1);
Packit 47f805
Packit 47f805
Packit 47f805
    SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1);
Packit 47f805
    SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1);
Packit 47f805
Packit 47f805
    SET__OPTION(msfix, abr_switch_map[r].nsmsfix, -1);
Packit 47f805
Packit 47f805
    SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1);
Packit 47f805
    SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1);
Packit 47f805
Packit 47f805
    /* ABR seems to have big problems with clipping, especially at low bitrates */
Packit 47f805
    /* so we compensate for that here by using a scale value depending on bitrate */
Packit 47f805
    lame_set_scale(gfp, lame_get_scale(gfp) * abr_switch_map[r].scale);
Packit 47f805
Packit 47f805
    SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0);
Packit 47f805
    if (abr_switch_map[r].masking_adj > 0) {
Packit 47f805
        SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * .9, 0);
Packit 47f805
    }
Packit 47f805
    else {
Packit 47f805
        SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * 1.1, 0);
Packit 47f805
    }
Packit 47f805
Packit 47f805
Packit 47f805
    SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0);
Packit 47f805
    SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1);
Packit 47f805
Packit 47f805
    SET_OPTION(interChRatio, abr_switch_map[r].interch, -1);
Packit 47f805
Packit 47f805
    (void) abr_switch_map[r].abr_kbps;
Packit 47f805
Packit 47f805
    gfp->internal_flags->cfg.minval = 5. * (abr_switch_map[r].abr_kbps / 320.);
Packit 47f805
Packit 47f805
    return preset;
Packit 47f805
}
Packit 47f805
Packit 47f805
Packit 47f805
Packit 47f805
int
Packit 47f805
apply_preset(lame_global_flags * gfp, int preset, int enforce)
Packit 47f805
{
Packit 47f805
    /*translate legacy presets */
Packit 47f805
    switch (preset) {
Packit 47f805
    case R3MIX:
Packit 47f805
        {
Packit 47f805
            preset = V3;
Packit 47f805
            (void) lame_set_VBR(gfp, vbr_mtrh);
Packit 47f805
            break;
Packit 47f805
        }
Packit 47f805
    case MEDIUM:
Packit 47f805
    case MEDIUM_FAST:
Packit 47f805
        {
Packit 47f805
            preset = V4;
Packit 47f805
            (void) lame_set_VBR(gfp, vbr_mtrh);
Packit 47f805
            break;
Packit 47f805
        }
Packit 47f805
    case STANDARD:
Packit 47f805
    case STANDARD_FAST:
Packit 47f805
        {
Packit 47f805
            preset = V2;
Packit 47f805
            (void) lame_set_VBR(gfp, vbr_mtrh);
Packit 47f805
            break;
Packit 47f805
        }
Packit 47f805
    case EXTREME:
Packit 47f805
    case EXTREME_FAST:
Packit 47f805
        {
Packit 47f805
            preset = V0;
Packit 47f805
            (void) lame_set_VBR(gfp, vbr_mtrh);
Packit 47f805
            break;
Packit 47f805
        }
Packit 47f805
    case INSANE:
Packit 47f805
        {
Packit 47f805
            preset = 320;
Packit 47f805
            gfp->preset = preset;
Packit 47f805
            (void) apply_abr_preset(gfp, preset, enforce);
Packit 47f805
            lame_set_VBR(gfp, vbr_off);
Packit 47f805
            return preset;
Packit 47f805
        }
Packit 47f805
    }
Packit 47f805
Packit 47f805
    gfp->preset = preset;
Packit 47f805
    {
Packit 47f805
        switch (preset) {
Packit 47f805
        case V9:
Packit 47f805
            apply_vbr_preset(gfp, 9, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V8:
Packit 47f805
            apply_vbr_preset(gfp, 8, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V7:
Packit 47f805
            apply_vbr_preset(gfp, 7, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V6:
Packit 47f805
            apply_vbr_preset(gfp, 6, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V5:
Packit 47f805
            apply_vbr_preset(gfp, 5, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V4:
Packit 47f805
            apply_vbr_preset(gfp, 4, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V3:
Packit 47f805
            apply_vbr_preset(gfp, 3, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V2:
Packit 47f805
            apply_vbr_preset(gfp, 2, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V1:
Packit 47f805
            apply_vbr_preset(gfp, 1, enforce);
Packit 47f805
            return preset;
Packit 47f805
        case V0:
Packit 47f805
            apply_vbr_preset(gfp, 0, enforce);
Packit 47f805
            return preset;
Packit 47f805
        default:
Packit 47f805
            break;
Packit 47f805
        }
Packit 47f805
    }
Packit 47f805
    if (8 <= preset && preset <= 320) {
Packit 47f805
        return apply_abr_preset(gfp, preset, enforce);
Packit 47f805
    }
Packit 47f805
Packit 47f805
    gfp->preset = 0;    /*no corresponding preset found */
Packit 47f805
    return preset;
Packit 47f805
}