From d2124cdf0dce5389f2a627ef69a99c4f25fc7209 Mon Sep 17 00:00:00 2001
From: Jean-Marc Valin <jean-marc.valin@octasic.com>
Date: Mon, 25 Apr 2011 13:36:14 -0400
Subject: [PATCH] Loss rate adaptation for the CELT layer

---
 celt               | 2 +-
 src/opus_encoder.c | 9 +++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/celt b/celt
index d25dd2bff..cb73e5ca6 160000
--- a/celt
+++ b/celt
@@ -1 +1 @@
-Subproject commit d25dd2bff9f111fcc8d2de802c1cca337db27873
+Subproject commit cb73e5ca62f93f530e65b244cf52f905a727d04d
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index 1872fe9af..cf0eee178 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -583,7 +583,10 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...)
         case OPUS_SET_PACKET_LOSS_PERC_REQUEST:
         {
             int value = va_arg(ap, int);
+            if (value < 0 || value > 100)
+                return OPUS_BAD_ARG;
             st->silk_mode.packetLossPercentage = value;
+            celt_encoder_ctl(st->celt_enc, CELT_SET_LOSS_PERC(value));
         }
         break;
         case OPUS_GET_PACKET_LOSS_PERC_REQUEST:
@@ -609,7 +612,7 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...)
         {
             int value = va_arg(ap, int);
             if (value>100 || value<0)
-                return OPUS_BAD_ARG;
+                goto bad_arg;
             st->voice_ratio = value;
         }
         break;
@@ -635,9 +638,11 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...)
             fprintf(stderr, "unknown opus_encoder_ctl() request: %d", request);
             break;
     }
-
     va_end(ap);
     return OPUS_OK;
+bad_arg:
+    va_end(ap);
+    return OPUS_BAD_ARG;
 }
 
 void opus_encoder_destroy(OpusEncoder *st)
-- 
GitLab