Dubois-Rande, Antoine
2013-Jul-18 15:12 UTC
[opus] Help building OPUS library using FIXED_POINT option
Hi,
We are rebasing our audio compression subsystem using OPUS rather than SPEEX.
The platform is Android but this piece is written in C code: we need to support
armv5/armv7/x86 architectures.... and we use the released opus-1.1beta package
from here<http://downloads.xiph.org/releases/opus/opus-1.1-beta.tar.gz>.
A lot of our OPUS build system + code to drive the audio compression has been
reused from our SPEEX port since there are a lot of similarities between the
OPUS and SPEEX build flags and APIs.
I can build and run OPUS on the device using the default FLOATING point.
However, for latency reasons, we are considering building with FIXED_POINT (like
we do for SPEEX). Then I have the link error below. a macro is not defined and a
method is not implemented when compiling with FIXED_POINT. I did a search on
your code base and indeed that seems to be the problem.
I might be missing something but please verify on your side and keep me posted
about your results. I also attached the python file that list the files we are
building for FIXED POINT and FLOATING POINT mode as well as our config.h file
adapted from our SPEEX implementation.
Thanks,
-Antoine
BUILD LOG:
...
[exec] Compile x86 : 1 <= schur64_FIX.c
[exec] Compile x86 : 1 <= schur_FIX.c
[exec] Compile x86 : 1 <= solve_LS_FIX.c
[exec] Compile x86 : 1 <= vector_ops_FIX.c
[exec] Compile x86 : 1 <= warped_autocorrelation_FIX.c
[exec] StaticLibrary : lib0.a
[exec] StaticLibrary : lib1.a
[exec] StaticLibrary : lib0.a
[exec] StaticLibrary : lib1.a
[exec] StaticLibrary : lib0.a
[exec] StaticLibrary : lib1.a
[exec] SharedLibrary : libdmt_opus.so
[exec] SharedLibrary : libdmt_opus.so
[exec] SharedLibrary : libdmt_opus.so
[exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb
uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr
oideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(analysis.o): in function run_anal
ysis:jni/src/libopus/src/analysis.c:636: error: undefined reference to
'optimize
_framesize'
[exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb
uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr
oideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(mlp.o): in function tansig_approx
.part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to
'MULT16_16_Q
11'
[exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb
uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr
oideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(mlp.o): in function tansig_approx
.part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to
'MULT16_16_Q
11'
[exec] collect2: ld returned 1 exit status
[exec] make: *** [obj/local/armeabi/libdmt_opus.so] Error 1
[exec] make: *** Waiting for unfinished jobs....
[exec] /cygdrive/c/android/android-ndk-r8e/build/core/build-binary.mk:450:
recipe for target `obj/local/armeabi/libdmt_opus.so' failed
[exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb
uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr
oideabi/bin/ld.exe: ./obj/local/armeabi-v7a/lib0.a(analysis.o): in function run_
analysis:jni/src/libopus/src/analysis.c:636: error: undefined reference to
'opti
mize_framesize'
[exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb
uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr
oideabi/bin/ld.exe: ./obj/local/armeabi-v7a/lib0.a(mlp.o): in function tansig_ap
prox.part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to
'MULT16_
16_Q11'
[exec] C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/preb
uilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-andr
oideabi/bin/ld.exe: ./obj/local/armeabi-v7a/lib0.a(mlp.o): in function tansig_ap
prox.part.0:jni/src/libopus/src/mlp.c:60: error: undefined reference to
'MULT16_
16_Q11'
[exec] collect2: ld returned 1 exit status
[exec] make: *** [obj/local/armeabi-v7a/libdmt_opus.so] Error 1
[exec] /cygdrive/c/android/android-ndk-r8e/build/core/build-binary.mk:450:
recipe for target `obj/local/armeabi-v7a/libdmt_opus.so' failed
[exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/.
./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob
j/local/x86/lib0.a(analysis.o): in function run_analysis:jni/src/libopus/src/ana
lysis.c:636: error: undefined reference to 'optimize_framesize'
[exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/.
./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob
j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60:
error: undefined reference to 'MULT16_16_Q11'
[exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/.
./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob
j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60:
error: undefined reference to 'MULT16_16_Q11'
[exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/.
./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob
j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60:
error: undefined reference to 'MULT16_16_Q11'
[exec] C:/android/android-ndk-r8e/toolchains/x86-4.6/prebuilt/windows/bin/.
./lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld.exe: ./ob
j/local/x86/lib0.a(mlp.o): in function mlp_process:jni/src/libopus/src/mlp.c:60:
error: undefined reference to 'MULT16_16_Q11'
[exec] collect2: ld returned 1 exit status
[exec] make: *** [obj/local/x86/libdmt_opus.so] Error 1
[exec] /cygdrive/c/android/android-ndk-r8e/build/core/build-binary.mk:450:
recipe for target `obj/local/x86/libdmt_opus.so' failed
[exec] make: Leaving directory `/cygdrive/c/eng/nmt/NextGen/trunk/android/N
extGen/build/opus'
BUILD FAILED
C:\eng\nmt\NextGen\trunk\android\NextGen\build.xml:374: The following error occu
rred while executing this line:
C:\eng\nmt\NextGen\trunk\android\NextGen\build-native-lib.xml:28: exec returned:
2
Total time: 1 minute 10 seconds
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0001.htm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build_config _FLP.py
Type: application/octet-stream
Size: 16563 bytes
Desc: build_config _FLP.py
Url :
http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0002.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build_config_FIX.py
Type: application/octet-stream
Size: 16017 bytes
Desc: build_config_FIX.py
Url :
http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0003.obj
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: config.h
Url:
http://lists.xiph.org/pipermail/opus/attachments/20130718/d1b9c0fe/attachment-0001.txt
Ralph Giles
2013-Jul-18 17:39 UTC
[opus] Help building OPUS library using FIXED_POINT option
On 13-07-18 8:12 AM, Dubois-Rande, Antoine wrote:> C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(analysis.o): in function > run_analysis:jni/src/libopus/src/analysis.c:636: error: undefined reference to > 'optimize_framesize'Don't include analysis.c, mlp.c or mlp_data.c in the fixed point build. Those files are float-only. I'd recommend parsing *_sources.mk from the source tree and using that to construct your build dictionaries. That way you'll get an accurate source list and not have to track changes to the source file lists manually. -r
Dubois-Rande, Antoine
2013-Jul-18 18:51 UTC
[opus] Help building OPUS library using FIXED_POINT option
Thanks Ralph, it worked. I also updated our "make_build_config.py" to exclude those files so it correctly generates "build_config.py". We will look into automating this a bit more by parsing your .mk files. Best, -Antoine -----Original Message----- From: Ralph Giles [mailto:giles at thaumas.net] Sent: Thursday, July 18, 2013 1:40 PM To: Dubois-Rande, Antoine Cc: opus at xiph.org; Robitaille, Marc; Pham, Dan; Xu, Letian Subject: Re: [opus] Help building OPUS library using FIXED_POINT option On 13-07-18 8:12 AM, Dubois-Rande, Antoine wrote:> C:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebui > lt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-li > nux-androideabi/bin/ld.exe: ./obj/local/armeabi/lib0.a(analysis.o): in > function > run_analysis:jni/src/libopus/src/analysis.c:636: error: undefined > reference to 'optimize_framesize'Don't include analysis.c, mlp.c or mlp_data.c in the fixed point build. Those files are float-only. I'd recommend parsing *_sources.mk from the source tree and using that to construct your build dictionaries. That way you'll get an accurate source list and not have to track changes to the source file lists manually. -r