[opus] resample of libopusenc-0.2.1 outputs all zeros if define FIXED_POINT
Forrest
forrest at 263.net
Fri Jun 14 18:00:48 UTC 2019
Actually opus-tools-0.2 has the same issue.
Sincerely
Forrest Zhang
-------------- next part --------------
Add "#define FIXED_POINT 1" into the top of resample.c, outputs of resample are all zeros.
Actually the data transform is required before/after calling speex_resampler_process_native().
diff -Naupr libopusenc-0.2.1-vanilla/src/resample.c libopusenc-0.2.1/src/resample.c
--- libopusenc-0.2.1-vanilla/src/resample.c 2018-09-15 10:35:06 +0800
+++ libopusenc-0.2.1/src/resample.c 2019-06-15 01:32:37 +0800
@@ -82,7 +82,7 @@ static void speex_free(void *ptr) {free(
#include <limits.h>
#ifndef M_PI
-#define M_PI 3.14159265358979323846
+#define M_PI 3.14159265358979323846f
#endif
#define IMAX(a,b) ((a) > (b) ? (a) : (b))
@@ -1000,7 +1000,8 @@ EXPORT int speex_resampler_process_int(S
if (in) {
for(j=0;j<ichunk;++j)
#ifdef FIXED_POINT
- x[j+st->filt_len-1]=WORD2INT(in[j*istride_save]);
+ /* [-1.0, 1.0] ==> [-32768, 32767] */
+ x[j+st->filt_len-1]=WORD2INT(32768 * in[j*istride_save]);
#else
x[j+st->filt_len-1]=in[j*istride_save];
#endif
@@ -1017,7 +1018,8 @@ EXPORT int speex_resampler_process_int(S
for (j=0;j<ochunk+omagic;++j)
#ifdef FIXED_POINT
- out[j*ostride_save] = ystack[j];
+ /* [-32768, 32767] ==> [-1.0, 1.0] */
+ out[j*ostride_save] = ystack[j] / 32768.f;
#else
out[j*ostride_save] = WORD2INT(ystack[j]);
#endif
More information about the opus
mailing list