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);
--
⑨