shithub: opus

Download patch

ref: 7d4aeb756f2bf6d8b6119f66acc7954b8651258c
parent: d7e1bd507f2f1bdec0487133036f135801abcb71
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Mon May 8 22:45:19 EDT 2023

Fix DRED PVQ for case when K=0 on a split

--- a/silk/dred_coding.c
+++ b/silk/dred_coding.c
@@ -36,6 +36,7 @@
 #include "celt/vq.h"
 #include "celt/cwrs.h"
 #include "celt/laplace.h"
+#include "os_support.h"
 
 #define LATENT_DIM 80
 #define PVQ_DIM 24
@@ -46,7 +47,10 @@
     celt_assert(N==24 || N==12 || N==6);
     fits = (N==24 && K<=9) || (N==12 && K<=16) || (N==6);
     /*printf("encode(%d,%d), fits=%d\n", N, K, fits);*/
-    if (fits) encode_pulses(iy, N, K, enc);
+    if (fits) {
+      if (K > 0)
+        encode_pulses(iy, N, K, enc);
+    }
     else {
         int N2 = N/2;
         int K0=0;
@@ -90,7 +94,12 @@
     celt_assert(N==24 || N==12 || N==6);
     fits = (N==24 && K<=9) || (N==12 && K<=16) || (N==6);
     /*printf("encode(%d,%d), fits=%d\n", N, K, fits);*/
-    if (fits) decode_pulses(iy, N, K, dec);
+    if (fits) {
+      if (K > 0)
+        decode_pulses(iy, N, K, dec);
+      else
+        OPUS_CLEAR(iy, N);
+    }
     else {
         int N2 = N/2;
         int K0;
--