Hi there,
I've just started to work with the great speex encoder on ARM9-based
embedded platform. This is my configuration:
CPU: Cirrus Logic EP9315 @ 200 MHz (ARM920T)
o.s.: Linux 2.6.9-rc2-ep93xx
GCC: gcc version 3.3.3 (DENX ELDK 3.1 3.3.3-10) without MaverickCrunch support
ogg library: 1.0
speex command line configuration: ./configure --enable-fixed-point
--enable-arm4-asm
The code is natively built on the target (i.e. no cross compilation)
I performed some tests with this simple script (the test-gab.pcm file is
about 10.1 seconds):
echo --------------------------------------------------------------------------
echo comp 0, bitrate 6600
time ../src/speexenc -w --bitrate 6600 --comp 0 test-gab.pcm
test-gab_b6600_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 0, bitrate 8000
time ../src/speexenc -w --bitrate 8000 --comp 0 test-gab.pcm
test-gab_b8000_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 0, bitrate 16000
time ../src/speexenc -w --bitrate 16000 --comp 0 test-gab.pcm
test-gab_b16000_c1.arm.spx
echo --------------------------------------------------------------------------
echo --------------------------------------------------------------------------
echo comp 1, bitrate 6600
time ../src/speexenc -w --bitrate 6600 --comp 1 test-gab.pcm
test-gab_b6600_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 1, bitrate 8000
time ../src/speexenc -w --bitrate 8000 --comp 1 test-gab.pcm
test-gab_b8000_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 1, bitrate 16000
time ../src/speexenc -w --bitrate 16000 --comp 1 test-gab.pcm
test-gab_b16000_c1.arm.spx
echo --------------------------------------------------------------------------
echo --------------------------------------------------------------------------
echo comp 3, bitrate 6600
time ../src/speexenc -w --bitrate 6600 --comp 3 test-gab.pcm
test-gab_b6600_c3.arm.spx
echo --------------------------------------------------------------------------
echo comp 3, bitrate 8000
time ../src/speexenc -w --bitrate 8000 --comp 3 test-gab.pcm
test-gab_b8000_c3.arm.spx
echo --------------------------------------------------------------------------
echo comp 3, bitrate 16000
time ../src/speexenc -w --bitrate 16000 --comp 3 test-gab.pcm
test-gab_b16000_c3.arm.spx
echo --------------------------------------------------------------------------
echo --------------------------------------------------------------------------
echo comp 8, bitrate 6600
time ../src/speexenc -w --bitrate 6600 --comp 8 test-gab.pcm
test-gab_b6600_c8.arm.spx
echo --------------------------------------------------------------------------
echo comp 8, bitrate 8000
time ../src/speexenc -w --bitrate 8000 --comp 8 test-gab.pcm
test-gab_b8000_c8.arm.spx
echo --------------------------------------------------------------------------
echo comp 8, bitrate 16000
time ../src/speexenc -w --bitrate 16000 --comp 8 test-gab.pcm
test-gab_b16000_c8.arm.spx
Here are the results I got:
--------------------------------------------------------------------------
comp 0, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m5.286s
user 0m4.560s
sys 0m0.420s
--------------------------------------------------------------------------
comp 0, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m4.836s
user 0m4.510s
sys 0m0.250s
--------------------------------------------------------------------------
comp 0, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m8.159s
user 0m5.550s
sys 0m0.280s
--------------------------------------------------------------------------
--------------------------------------------------------------------------
comp 1, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m7.596s
user 0m4.820s
sys 0m0.200s
--------------------------------------------------------------------------
comp 1, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m5.033s
user 0m4.780s
sys 0m0.170s
--------------------------------------------------------------------------
comp 1, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m6.149s
user 0m5.740s
sys 0m0.280s
--------------------------------------------------------------------------
--------------------------------------------------------------------------
comp 3, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m5.650s
user 0m5.310s
sys 0m0.220s
--------------------------------------------------------------------------
comp 3, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m5.780s
user 0m5.430s
sys 0m0.260s
--------------------------------------------------------------------------
comp 3, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m8.905s
user 0m8.530s
sys 0m0.210s
--------------------------------------------------------------------------
--------------------------------------------------------------------------
comp 8, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m7.168s
user 0m6.870s
sys 0m0.210s
--------------------------------------------------------------------------
comp 8, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m8.510s
user 0m8.090s
sys 0m0.290s
--------------------------------------------------------------------------
comp 8, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)
real 0m17.096s
user 0m16.740s
sys 0m0.260s
This processor integrates a so-called MaverickCrunch coprocessor.
This coprocessor accelerates both IEEE-754 floating point and 32-bit
and 64-bit fixed point operations. Datasheet claims it is considerable
faster than ARM920T MAC operation.
So we can enable/disable at least four parameters:
1) fixed-point implementation (--enable-fixed-point)
2) ARM4T assembly optimization (--enable-arm4-asm)
3) support for MaverickCrunch (if this is enabled, I think
point 1 and 2 become meaningless)
4) command-line comp parameter
Clearly the best solution is exploiting the MaverickCrunch coprocessor.
Assuming we have MaverickCrunch-enabled GCC e glibc, do you suggest
to use e full floating point implementation or to use the
--enable-fixed-point anyway?
Thanks in advance and best regards,
llandre
DAVE Electronics System House - R&D Department
web: http://www.dave-tech.it
email: r&d2@dave-tech.it