AMR-WB Integration

This commit is contained in:
Yann Diorcet 2012-01-26 16:00:51 +01:00
parent 036e629b3b
commit 9d8d6be92f
14 changed files with 158 additions and 24 deletions

3
.gitmodules vendored
View file

@ -49,3 +49,6 @@
[submodule "submodules/mssilk"]
path = submodules/mssilk
url = git://git.linphone.org/mssilk.git
[submodule "submodules/externals/vo-amrwbenc"]
path = submodules/externals/vo-amrwbenc
url = git://opencore-amr.git.sourceforge.net/gitroot/opencore-amr/vo-amrwbenc

9
README
View file

@ -13,10 +13,11 @@ To build liblinphone for Android, you must:
Some options can be passed to ndk-build, like "ndk-build SOME_OPTION=SOME_VALUE"
Option Name | Possible values
---------------------------------------------------------------------------------
BUILD_X264 0 (don't build x264) or 1 (build x264)
BUILD_AMR 0 (don't build amr codec), light (try to use amr codec from android), full (build your own amr codec)
Option Name | Possible values | Default value
-------------------------------------------------------------------------------------------------------------------------------------------------------
BUILD_X264 0 (don't build x264) or 1 (build x264)
BUILD_AMRNB 0 (don't build amrnb codec), light (try to use amrnb codec from android), full (build your own amrnb codec) | light
BUILD_AMRWB 0 (don't build amrwb codec), 1 (build your own amrwb codec) | 1
BUILD_GPLV3_ZRTP 0 (don't support ZRTP), 1 (support ZRTP and make the whole program GPLv3)
BUILD_SILK 0 (don't build silk plugin), 1 (build silk) [silk is Skype nonfree patented audio codec]
BUILD_TUNNEL 0 (don't build tunnel), 1 (build tunnel) [requires a tunnel implementation in submodules/linphone/tunnel]

View file

@ -1,8 +1,15 @@
# script expect linphone-root-dir variable to be set by parent !
#default values
BUILD_AMR=light
ifeq ($(BUILD_AMRNB),)
BUILD_AMRNB=light
endif
ifeq ($(BUILD_AMRWB),)
BUILD_AMRWB=0
endif
ifeq ($(BUILD_AMRWB),)
BUILD_SRTP=1
endif
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
BUILD_X264=1
@ -13,7 +20,6 @@ BUILD_X264=0
endif
##ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
ifeq ($(BUILD_GPLV3_ZRTP), 1)
BUILD_SRTP=1
@ -112,7 +118,20 @@ endif
include $(linphone-root-dir)/submodules/linphone/build/android/Android.mk
ifneq ($(BUILD_AMR), 0)
_BUILD_AMR=0
ifneq ($(BUILD_AMRNB), 0)
_BUILD_AMR=1
endif
ifneq ($(BUILD_AMRWB), 0)
_BUILD_AMR=1
endif
ifneq ($(_BUILD_AMR), 0)
include $(linphone-root-dir)/submodules/externals/build/opencore-amr/Android.mk
include $(linphone-root-dir)/submodules/msamr/Android.mk
endif
ifneq ($(BUILD_AMRWB), 0)
include $(linphone-root-dir)/submodules/externals/build/vo-amrwbenc/Android.mk
endif

View file

@ -2,14 +2,38 @@ APP_PROJECT_PATH := $(call my-dir)/../
APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone
APP_STL := stlport_static
#default values
ifeq ($(BUILD_AMRNB),)
BUILD_AMRNB=light
endif
ifeq ($(BUILD_AMRWB),)
BUILD_AMRWB=0
endif
ifeq ($(BUILD_AMRWB),)
BUILD_SRTP=1
endif
ifeq ($(LINPHONE_VIDEO),1)
APP_MODULES += libavutil libavcore libavcodec libswscale libvpx
endif
ifeq ($(BUILD_AMR),1)
_BUILD_AMR=0
ifneq ($(BUILD_AMRNB), 0)
_BUILD_AMR=1
endif
ifneq ($(BUILD_AMRWB), 0)
_BUILD_AMR=1
endif
ifneq ($(_BUILD_AMR), 0)
APP_MODULES += libopencoreamr libmsamr
endif
ifneq ($(BUILD_AMRWB), 0)
APP_MODULES += libvoamrwbenc
endif
ifeq ($(BUILD_X264),1)
APP_MODULES +=libx264 libmsx264
endif

View file

@ -55,6 +55,7 @@
<string name="pref_codec_gsm_key">pref_codec_gsm_key</string>
<string name="pref_codec_g722_key">pref_codec_g722_key</string>
<string name="pref_codec_amr_key">pref_codec_amr_key</string>
<string name="pref_codec_amrwb_key">pref_codec_amrwb_key</string>
<string name="pref_codec_ilbc_key">pref_codec_ilbc_key</string>
<string name="pref_codec_speex8_key">pref_codec_speex8_key</string>
<string name="pref_codec_speex16_key">pref_codec_speex16_key</string>

View file

@ -150,6 +150,7 @@
<string name="pref_codec_gsm">gsm</string>
<string name="pref_codec_g722">g722</string>
<string name="pref_codec_amr">amr</string>
<string name="pref_codec_amrwb">amr-wb</string>
<string name="pref_codec_ilbc">ilbc</string>
<string name="pref_codec_speex8">speex 8 Khz</string>
<string name="pref_codec_speex16">speex 16 Khz</string>

View file

@ -77,6 +77,10 @@
android:title="@string/pref_codec_amr"
android:defaultValue="true"
android:shouldDisableView="true" />
<CheckBoxPreference android:key="@string/pref_codec_amrwb_key"
android:title="@string/pref_codec_amrwb"
android:defaultValue="true"
android:shouldDisableView="true" />
<CheckBoxPreference android:key="@string/pref_codec_gsm_key"
android:title="@string/pref_codec_gsm"/>
<CheckBoxPreference android:key="@string/pref_codec_g722_key"

View file

@ -27,6 +27,7 @@ import static android.media.AudioManager.STREAM_RING;
import static android.media.AudioManager.STREAM_VOICE_CALL;
import static android.media.AudioManager.VIBRATE_TYPE_RINGER;
import static org.linphone.R.string.pref_codec_amr_key;
import static org.linphone.R.string.pref_codec_amrwb_key;
import static org.linphone.R.string.pref_codec_ilbc_key;
import static org.linphone.R.string.pref_codec_speex16_key;
import static org.linphone.R.string.pref_codec_speex32_key;
@ -572,6 +573,7 @@ public final class LinphoneManager implements LinphoneCoreListener {
enableDisableAudioCodec("PCMU", 8000, R.string.pref_codec_pcmu_key);
enableDisableAudioCodec("PCMA", 8000, R.string.pref_codec_pcma_key);
enableDisableAudioCodec("AMR", 8000, R.string.pref_codec_amr_key);
enableDisableAudioCodec("AMR-WB", 16000, R.string.pref_codec_amrwb_key);
enableDisableAudioCodec("SILK", 24000, R.string.pref_codec_silk24_key);
enableDisableAudioCodec("SILK", 16000, R.string.pref_codec_silk16_key);
enableDisableAudioCodec("SILK", 12000, R.string.pref_codec_silk12_key);
@ -1121,6 +1123,10 @@ public final class LinphoneManager implements LinphoneCoreListener {
.findPayloadType("AMR", 8000)!=null;
e.putBoolean(getString(pref_codec_amr_key), amr);
boolean amrwb = LinphoneService.isReady() && LinphoneManager.getLc()
.findPayloadType("AMR-WB", 16000)!=null;
e.putBoolean(getString(pref_codec_amrwb_key), amrwb);
if (Version.sdkStrictlyBelow(5) || !Version.hasNeon() || !Hacks.hasCamera()) {
e.putBoolean(getString(pref_video_enable_key), false);
}

View file

@ -22,6 +22,7 @@ package org.linphone;
import static org.linphone.R.string.ec_calibrating;
import static org.linphone.R.string.pref_codec_amr_key;
import static org.linphone.R.string.pref_codec_amrwb_key;
import static org.linphone.R.string.pref_codec_ilbc_key;
import static org.linphone.R.string.pref_codec_speex16_key;
import static org.linphone.R.string.pref_echo_cancellation_key;
@ -193,7 +194,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
initializeMediaEncryptionPreferences();
detectAudioCodec(pref_codec_amr_key,"AMR",8000, false);
detectAudioCodec(pref_codec_amr_key,"AMR", 8000, false);
detectAudioCodec(pref_codec_amrwb_key,"AMR-WB", 16000, false);
//detectAudioCodec(R.string.pref_codec_silk8_key,"SILK",8000, true);
//detectAudioCodec(R.string.pref_codec_silk12_key,"SILK",12000, true);
detectAudioCodec(R.string.pref_codec_silk16_key,"SILK",16000, true);

View file

@ -8,16 +8,32 @@ include $(CLEAR_VARS)
LOCAL_MODULE := libopencoreamr
LOCAL_SRC_FILES := \
amrnb/wrapper.cpp
_ADD_COMMON=0
ifneq ($(BUILD_AMRWB),0)
_ADD_COMMON=1
endif
ifeq ($(BUILD_AMRNB),full)
_ADD_COMMON=1
endif
ifeq ($(BUILD_AMR),light)
ifneq ($(BUILD_AMRNB),0)
LOCAL_SRC_FILES += \
amrnb/wrapper.cpp
endif
ifneq ($(BUILD_AMRWB),0)
LOCAL_SRC_FILES += \
amrwb/wrapper.cpp
endif
ifeq ($(BUILD_AMRNB),light)
#in this mode we try to dynamically link against the opencore-amr provided by android
LOCAL_CFLAGS += -include ../build/opencore-amr/stubs.h
LOCAL_SRC_FILES += ../build/opencore-amr/stubs.cpp
else
#in the other mode (full) we build our own opencore-amr.
endif
ifeq ($(BUILD_AMRNB),full)
#in the other mode (full) we build our own opencore-amr.
#common files
@ -178,12 +194,6 @@ LOCAL_SRC_FILES += \
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/sp_dec.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/wmf_to_ets.cpp
endif
LOCAL_ARM_MODE := arm
#for including config.h:
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/include \
@ -192,8 +202,70 @@ LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/common/dec/include \
$(LOCAL_PATH)/amrnb \
$(LOCAL_PATH)/amrnb
endif
ifneq ($(BUILD_AMRWB),0)
LOCAL_SRC_FILES += \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/agc2_amr_wb.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/band_pass_6k_7k.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_acelp_2p_in_64.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_acelp_4p_in_64.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_alg_codebook.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_gain2_amr_wb.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/deemphasis_32.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dtx_decoder_amr_wb.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/get_amr_wb_bits.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/highpass_400hz_at_12k8.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/highpass_50hz_at_12k8.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/homing_amr_wb_dec.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/interpolate_isp.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/isf_extrapolation.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/isp_az.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/isp_isf.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/lagconceal.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/low_pass_filt_7k.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/median5.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/mime_io.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/noise_gen_amrwb.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/oversamp_12k8_to_16k.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/phase_dispersion.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pit_shrp.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pred_lt4.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/preemph_amrwb_dec.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwb_math_op.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/q_gain2_tab.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qisf_ns.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qisf_ns_tab.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qpisf_2s.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qpisf_2s_tab.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/scale_signal.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/synthesis_amr_wb.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/voice_factor.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/wb_syn_filt.cpp \
opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/weight_amrwb_lpc.cpp
#decoder files
# opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/decoder_amr_wb.cpp \
#for including config.h:
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/include \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src \
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/common/dec/include \
$(LOCAL_PATH)/amrwb
endif
LOCAL_ARM_MODE := arm
#Common
ifeq ($(_ADD_COMMON),1)
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/oscl
endif
include $(BUILD_STATIC_LIBRARY)

1
submodules/externals/vo-amrwbenc vendored Submodule

@ -0,0 +1 @@
Subproject commit e96f4b5d3fe38b3bee5d71fefdaa1af8b842dde9

@ -1 +1 @@
Subproject commit 29e89fc9de102f88b8ebf36a5fe7449a26a8bbff
Subproject commit d964a2516783eed76b916415db2c2339745c3134

@ -1 +1 @@
Subproject commit 93274c2b87c7f0e9805ba235fbe531b8f61d6dc7
Subproject commit 2d6201d948ae30d1eff9c3db8f3c7f7475e615c3

@ -1 +1 @@
Subproject commit 98fb31155c687155139817eea86bd612c59fe88c
Subproject commit 3882685bd108d3a425ff0981da8a2fbcb0e82bb7