shithub: opus

Download patch

ref: 448518fbedf7d9c752ad2dfb855c1286fbc31797
parent: c0cc80dcf4d59b554b55be40dcebfcc00ddc83dd
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Sun Feb 25 12:14:29 EST 2024

Add some DRED decoding tests

--- a/tests/test_opus_encode.c
+++ b/tests/test_opus_encode.c
@@ -149,7 +149,15 @@
    opus_int16 *outbuf;
    int out_samples;
    int ret = 0;
-
+#ifdef ENABLE_DRED
+   OpusDREDDecoder *dred_dec;
+   OpusDRED *dred;
+   int dred_end;
+   int dred_amount;
+   int dred_ret;
+   dred_dec = opus_dred_decoder_create(&dred_ret);
+   dred = opus_dred_alloc(&dred_ret);
+#endif
    /* Generate input data */
    inbuf = (opus_int16*)malloc(sizeof(*inbuf)*SSAMPLES);
    generate_music(inbuf, SSAMPLES/2);
@@ -165,7 +173,22 @@
          ret = -1;
          break;
       }
-
+#ifdef ENABLE_DRED
+      dred_amount = opus_dred_parse(dred_dec, dred, packet, len, 48000, 48000, &dred_end, 0);
+      if(dred_amount<0) {
+         fprintf(stderr,"opus_dred_parse() returned %d\n",dred_amount);
+         ret = -1;
+         break;
+      }
+      if (dred_amount >= frame_size && (fast_rand()&1)) {
+         dred_ret = opus_decoder_dred_decode(dec, dred, frame_size, outbuf, frame_size);
+         if(dred_ret<0) {
+            fprintf(stderr,"opus_decoder_dred_decode() returned %d\n",dred_ret);
+            ret = -1;
+            break;
+         }
+      }
+#endif
       out_samples = opus_decode(dec, packet, len, outbuf, MAX_FRAME_SAMP, 0);
       if(out_samples!=frame_size) {
          fprintf(stderr,"opus_decode() returned %d\n",out_samples);
@@ -175,7 +198,10 @@
 
       samp_count += frame_size;
    } while (samp_count < ((SSAMPLES/2)-MAX_FRAME_SAMP));
-
+#ifdef ENABLE_DRED
+   opus_dred_decoder_destroy(dred_dec);
+   opus_dred_free(dred);
+#endif
    /* Clean up */
    free(inbuf);
    free(outbuf);
--