For celt_encoder_ctl CELT_SET_LTP is replaced with CELT_SET_PREDICTION

which allows the caller to request that frames be independent.
This commit is contained in:
Gregory Maxwell 2009-06-05 14:05:51 -04:00
parent f43488cdc2
commit 2dd3d3258a
2 changed files with 28 additions and 13 deletions

View file

@ -79,8 +79,10 @@ struct CELTEncoder {
int overlap; int overlap;
int channels; int channels;
int pitch_enabled; int pitch_enabled; /* Complexity level is allowed to use pitch */
int pitch_available; int pitch_permitted; /* Use of the LTP is permitted by the user */
int pitch_available; /* Amount of pitch buffer available */
int force_intra;
int delayedIntra; int delayedIntra;
celt_word16_t tonal_average; celt_word16_t tonal_average;
int fold_decision; int fold_decision;
@ -137,7 +139,9 @@ CELTEncoder *celt_encoder_create(const CELTMode *mode)
st->VBR_rate = 0; st->VBR_rate = 0;
st->pitch_enabled = 1; st->pitch_enabled = 1;
st->pitch_permitted = 1;
st->pitch_available = 1; st->pitch_available = 1;
st->force_intra = 0;
st->delayedIntra = 1; st->delayedIntra = 1;
st->tonal_average = QCONST16(1.,8); st->tonal_average = QCONST16(1.,8);
st->fold_decision = 1; st->fold_decision = 1;
@ -669,14 +673,14 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si
compute_band_energies(st->mode, freq, bandE); compute_band_energies(st->mode, freq, bandE);
intra_ener = st->delayedIntra; intra_ener = (st->force_intra || st->delayedIntra);
if (intra_decision(bandE, st->oldBandE, st->mode->nbEBands) || shortBlocks) if (shortBlocks || intra_decision(bandE, st->oldBandE, st->mode->nbEBands))
st->delayedIntra = 1; st->delayedIntra = 1;
else else
st->delayedIntra = 0; st->delayedIntra = 0;
/* Pitch analysis: we do it early to save on the peak stack space */ /* Pitch analysis: we do it early to save on the peak stack space */
/* Don't use pitch if there isn't enough data available yet, or if we're using shortBlocks */ /* Don't use pitch if there isn't enough data available yet, or if we're using shortBlocks */
has_pitch = st->pitch_enabled && (st->pitch_available >= MAX_PERIOD) && (!shortBlocks) && !intra_ener; has_pitch = st->pitch_enabled && st->pitch_permitted && (st->pitch_available >= MAX_PERIOD) && (!shortBlocks) && !intra_ener;
#ifdef EXP_PSY #ifdef EXP_PSY
ALLOC(tonality, MAX_PERIOD/4, celt_word16_t); ALLOC(tonality, MAX_PERIOD/4, celt_word16_t);
{ {
@ -1013,15 +1017,22 @@ int celt_encoder_ctl(CELTEncoder * restrict st, int request, ...)
} }
} }
break; break;
case CELT_SET_LTP_REQUEST: case CELT_SET_PREDICTION_REQUEST:
{ {
int value = va_arg(ap, celt_int32_t); int value = va_arg(ap, celt_int32_t);
if (value<0 || value>1 || (value==1 && st->pitch_available==0)) if (value<0 || value>2)
goto bad_arg; goto bad_arg;
if (value==0) if (value==0)
st->pitch_enabled = 0; {
else st->force_intra = 1;
st->pitch_enabled = 1; st->pitch_permitted = 0;
} else if (value=1) {
st->force_intra = 0;
st->pitch_permitted = 0;
} else {
st->force_intra = 0;
st->pitch_permitted = 1;
}
} }
break; break;
case CELT_SET_VBR_RATE_REQUEST: case CELT_SET_VBR_RATE_REQUEST:

View file

@ -77,9 +77,13 @@ extern "C" {
#define CELT_SET_COMPLEXITY_REQUEST 2 #define CELT_SET_COMPLEXITY_REQUEST 2
/** Controls the complexity from 0-10 (int) */ /** Controls the complexity from 0-10 (int) */
#define CELT_SET_COMPLEXITY(x) CELT_SET_COMPLEXITY_REQUEST, _celt_check_int(x) #define CELT_SET_COMPLEXITY(x) CELT_SET_COMPLEXITY_REQUEST, _celt_check_int(x)
#define CELT_SET_LTP_REQUEST 4 #define CELT_SET_PREDICTION_REQUEST 4
/** Activate or deactivate the use of the long term predictor (PITCH) from 0 or 1 (int) */ /** Controls the use of interframe prediction.
#define CELT_SET_LTP(x) CELT_SET_LTP_REQUEST, _celt_check_int(x) 0=Independent frames
1=Short term interframe prediction allowed
2=Long term prediction allowed
*/
#define CELT_SET_PREDICTION(x) CELT_SET_PREDICTION_REQUEST, _celt_check_int(x)
#define CELT_SET_VBR_RATE_REQUEST 6 #define CELT_SET_VBR_RATE_REQUEST 6
/** Set the target VBR rate in bits per second (int); 0=CBR (default) */ /** Set the target VBR rate in bits per second (int); 0=CBR (default) */
#define CELT_SET_VBR_RATE(x) CELT_SET_VBR_RATE_REQUEST, _celt_check_int(x) #define CELT_SET_VBR_RATE(x) CELT_SET_VBR_RATE_REQUEST, _celt_check_int(x)