Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/celt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jean-marc.valin@octasic.com>2011-04-21 18:41:13 +0400
committerJean-Marc Valin <jean-marc.valin@octasic.com>2011-04-21 18:41:13 +0400
commit6965388866f7046c96cddbb1fc34c573d944d19c (patch)
treec5e203e81e433c1af1cd423417c30c5e780dfa16
parentfdd867534a8f53ddb3f2845fc1dd48d13e734125 (diff)
Implements CELT_SET_LOSS_PERC
-rw-r--r--libcelt/celt.c15
-rw-r--r--libcelt/celt.h3
2 files changed, 18 insertions, 0 deletions
diff --git a/libcelt/celt.c b/libcelt/celt.c
index d6c2b4d..37f3d7c 100644
--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -144,6 +144,7 @@ struct CELTEncoder {
int vbr;
int signalling;
int constrained_vbr; /* If zero, VBR can do whatever it likes with the rate */
+ int loss_rate;
/* Everything beyond this point gets cleared on a reset */
#define ENCODER_RESET_START rng
@@ -1142,6 +1143,12 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
if (pitch_index > COMBFILTER_MAXPERIOD-2)
pitch_index = COMBFILTER_MAXPERIOD-2;
gain1 = MULT16_16_Q15(QCONST16(.7f,15),gain1);
+ if (st->loss_rate>2)
+ gain1 = HALF32(gain1);
+ if (st->loss_rate>4)
+ gain1 = HALF32(gain1);
+ if (st->loss_rate>8)
+ gain1 = 0;
prefilter_tapset = st->tapset_decision;
} else {
gain1 = 0;
@@ -1787,6 +1794,14 @@ int celt_encoder_ctl(CELTEncoder * restrict st, int request, ...)
st->force_intra = value==0;
}
break;
+ case CELT_SET_LOSS_PERC_REQUEST:
+ {
+ int value = va_arg(ap, celt_int32);
+ if (value<0 || value>100)
+ goto bad_arg;
+ st->loss_rate = value;
+ }
+ break;
case CELT_SET_VBR_CONSTRAINT_REQUEST:
{
celt_int32 value = va_arg(ap, celt_int32);
diff --git a/libcelt/celt.h b/libcelt/celt.h
index 11eb425..2bbf506 100644
--- a/libcelt/celt.h
+++ b/libcelt/celt.h
@@ -112,6 +112,9 @@ extern "C" {
#define CELT_SET_CHANNELS_REQUEST 18
#define CELT_SET_CHANNELS(x) CELT_SET_CHANNELS_REQUEST, _celt_check_int(x)
+#define CELT_SET_LOSS_PERC_REQUEST 20
+#define CELT_SET_LOSS_PERC(x) CELT_SET_LOSS_PERC_REQUEST, _celt_check_int(x)
+
/* Internal */
#define CELT_SET_START_BAND_REQUEST 10000
#define CELT_SET_START_BAND(x) CELT_SET_START_BAND_REQUEST, _celt_check_int(x)