add amr support to linphone-android
This commit is contained in:
parent
78146cc571
commit
3464da531f
19 changed files with 393 additions and 9 deletions
6
.gitmodules
vendored
6
.gitmodules
vendored
|
@ -31,3 +31,9 @@
|
||||||
[submodule "submodules/externals/openssl"]
|
[submodule "submodules/externals/openssl"]
|
||||||
path = submodules/externals/openssl
|
path = submodules/externals/openssl
|
||||||
url = git://git.linphone.org/android-openssl.git
|
url = git://git.linphone.org/android-openssl.git
|
||||||
|
[submodule "submodules/externals/opencore-amr"]
|
||||||
|
path = submodules/externals/opencore-amr
|
||||||
|
url = git://opencore-amr.git.sourceforge.net/gitroot/opencore-amr/opencore-amr
|
||||||
|
[submodule "submodules/msamr"]
|
||||||
|
path = submodules/msamr
|
||||||
|
url = git://git.linphone.org:msamr
|
||||||
|
|
11
README
11
README
|
@ -1,13 +1,22 @@
|
||||||
LINPHONE for ANDROID
|
LINPHONE for ANDROID
|
||||||
****************************
|
****************************
|
||||||
|
|
||||||
To build liblinphone for Android, you must first download the Android ndk R4 from google.
|
To build liblinphone for Android, you must first download the Android ndk r5b from google.
|
||||||
Next step is to download libilbc code:
|
Next step is to download libilbc code:
|
||||||
cd submodules/libilbc-rfc3951 && ./configure && make
|
cd submodules/libilbc-rfc3951 && ./configure && make
|
||||||
|
|
||||||
Finnaly from directory linphone-android, just execute command:
|
Finnaly from directory linphone-android, just execute command:
|
||||||
ndk-build
|
ndk-build
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
root-dir:=$(APP_PROJECT_PATH)
|
root-dir:=$(APP_PROJECT_PATH)
|
||||||
|
|
||||||
|
BUILD_AMR=light
|
||||||
|
|
||||||
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
|
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
|
||||||
BUILD_X264=1
|
BUILD_X264=1
|
||||||
|
@ -38,6 +39,9 @@ endif
|
||||||
|
|
||||||
include $(root-dir)/submodules/linphone/build/android/Android.mk
|
include $(root-dir)/submodules/linphone/build/android/Android.mk
|
||||||
|
|
||||||
|
ifneq ($(BUILD_AMR), 0)
|
||||||
|
include $(root-dir)/submodules/externals/build/opencore-amr/Android.mk
|
||||||
|
include $(root-dir)/submodules/msamr/Android.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ APP_PROJECT_PATH := $(call my-dir)/../
|
||||||
APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone
|
APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone
|
||||||
#APP_STL := stlport_static
|
#APP_STL := stlport_static
|
||||||
|
|
||||||
|
APP_MODULES += libopencoreamr libmsamr
|
||||||
|
|
||||||
ifeq ($(WITH_OPENSSL),1)
|
ifeq ($(WITH_OPENSSL),1)
|
||||||
APP_MODULES += libcrypto libssl
|
APP_MODULES += libcrypto libssl
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -33,6 +33,7 @@
|
||||||
<string name="pref_codec_pcma_key">pref_codec_pcma_key</string>
|
<string name="pref_codec_pcma_key">pref_codec_pcma_key</string>
|
||||||
<string name="pref_codec_pcmu_key">pref_codec_pcmu_key</string>
|
<string name="pref_codec_pcmu_key">pref_codec_pcmu_key</string>
|
||||||
<string name="pref_codec_gsm_key">pref_codec_gsm_key</string>
|
<string name="pref_codec_gsm_key">pref_codec_gsm_key</string>
|
||||||
|
<string name="pref_codec_amr_key">pref_codec_amr_key</string>
|
||||||
<string name="pref_codec_ilbc_key">pref_codec_ilbc_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_speex8_key">pref_codec_speex8_key</string>
|
||||||
<string name="pref_codec_speex16_key">pref_codec_speex16_key</string>
|
<string name="pref_codec_speex16_key">pref_codec_speex16_key</string>
|
||||||
|
@ -40,4 +41,5 @@
|
||||||
<string name="pref_codecs_key">pref_codecs_key</string>
|
<string name="pref_codecs_key">pref_codecs_key</string>
|
||||||
<string name="pref_stun_server_key">pref_stun_server_key</string>
|
<string name="pref_stun_server_key">pref_stun_server_key</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
<string name="pref_codec_pcma">pcma</string>
|
<string name="pref_codec_pcma">pcma</string>
|
||||||
<string name="pref_codec_pcmu">pcmu</string>
|
<string name="pref_codec_pcmu">pcmu</string>
|
||||||
<string name="pref_codec_gsm">gsm</string>
|
<string name="pref_codec_gsm">gsm</string>
|
||||||
|
<string name="pref_codec_amr">amr</string>
|
||||||
<string name="pref_codec_ilbc">ilbc</string>
|
<string name="pref_codec_ilbc">ilbc</string>
|
||||||
<string name="pref_codec_speex8">speex 8 Khz</string>
|
<string name="pref_codec_speex8">speex 8 Khz</string>
|
||||||
<string name="pref_codec_speex16">speex 16 Khz</string>
|
<string name="pref_codec_speex16">speex 16 Khz</string>
|
||||||
|
@ -115,4 +116,6 @@
|
||||||
<string name="first_login_connect">Connect</string>
|
<string name="first_login_connect">Connect</string>
|
||||||
<string name="first_launch_no_login_password">Please enter your login and password</string>
|
<string name="first_launch_no_login_password">Please enter your login and password</string>
|
||||||
<string name="first_launch_bad_login_password">Couldn\'t connect; check your login and password and start again</string>
|
<string name="first_launch_bad_login_password">Couldn\'t connect; check your login and password and start again</string>
|
||||||
|
|
||||||
|
<string name="pref_amr_summary">AMR codec might not be present on your phone</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -57,7 +57,10 @@
|
||||||
android:title="@string/pref_codec_ilbc"
|
android:title="@string/pref_codec_ilbc"
|
||||||
android:shouldDisableView="true"
|
android:shouldDisableView="true"
|
||||||
android:summary="@string/pref_ilbc_summary"/>
|
android:summary="@string/pref_ilbc_summary"/>
|
||||||
<CheckBoxPreference android:key="@string/pref_codec_gsm_key"
|
<CheckBoxPreference android:key="@string/pref_codec_amr_key"
|
||||||
|
android:title="@string/pref_codec_amr"
|
||||||
|
android:shouldDisableView="true" />
|
||||||
|
<CheckBoxPreference android:key="@string/pref_codec_gsm_key"
|
||||||
android:title="@string/pref_codec_gsm"/>
|
android:title="@string/pref_codec_gsm"/>
|
||||||
<CheckBoxPreference android:key="@string/pref_codec_pcmu_key"
|
<CheckBoxPreference android:key="@string/pref_codec_pcmu_key"
|
||||||
android:title="@string/pref_codec_pcmu"/>
|
android:title="@string/pref_codec_pcmu"/>
|
||||||
|
|
|
@ -512,4 +512,3 @@ public class LinphoneActivity extends TabActivity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import static android.media.AudioManager.STREAM_RING;
|
||||||
import static android.media.AudioManager.STREAM_VOICE_CALL;
|
import static android.media.AudioManager.STREAM_VOICE_CALL;
|
||||||
import static android.media.AudioManager.VIBRATE_TYPE_RINGER;
|
import static android.media.AudioManager.VIBRATE_TYPE_RINGER;
|
||||||
import static org.linphone.R.string.pref_codec_ilbc_key;
|
import static org.linphone.R.string.pref_codec_ilbc_key;
|
||||||
|
import static org.linphone.R.string.pref_codec_amr_key;
|
||||||
import static org.linphone.R.string.pref_codec_speex16_key;
|
import static org.linphone.R.string.pref_codec_speex16_key;
|
||||||
import static org.linphone.R.string.pref_codec_speex32_key;
|
import static org.linphone.R.string.pref_codec_speex32_key;
|
||||||
import static org.linphone.R.string.pref_echo_cancellation_key;
|
import static org.linphone.R.string.pref_echo_cancellation_key;
|
||||||
|
@ -385,11 +386,18 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean detectVideoCodec(String mime) {
|
public boolean detectVideoCodec(String mime) {
|
||||||
for (PayloadType videoCodec : mLc.listVideoCodecs()) {
|
for (PayloadType videoCodec : mLc.getVideoCodecs()) {
|
||||||
if (mime.equals(videoCodec.getMime())) return true;
|
if (mime.equals(videoCodec.getMime())) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean detectAudioCodec(String mime){
|
||||||
|
for (PayloadType audioCodec : mLc.getAudioCodecs()) {
|
||||||
|
if (mime.equals(audioCodec.getMime())) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void initFromConf(Context context) throws LinphoneConfigException {
|
public void initFromConf(Context context) throws LinphoneConfigException {
|
||||||
//traces
|
//traces
|
||||||
|
@ -411,9 +419,10 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
||||||
enableDisableAudioCodec("GSM", 8000, R.string.pref_codec_gsm_key);
|
enableDisableAudioCodec("GSM", 8000, R.string.pref_codec_gsm_key);
|
||||||
enableDisableAudioCodec("PCMU", 8000, R.string.pref_codec_pcmu_key);
|
enableDisableAudioCodec("PCMU", 8000, R.string.pref_codec_pcmu_key);
|
||||||
enableDisableAudioCodec("PCMA", 8000, R.string.pref_codec_pcma_key);
|
enableDisableAudioCodec("PCMA", 8000, R.string.pref_codec_pcma_key);
|
||||||
|
enableDisableAudioCodec("AMR", 8000, R.string.pref_codec_amr_key);
|
||||||
|
|
||||||
// Configure video codecs
|
// Configure video codecs
|
||||||
for (PayloadType videoCodec : mLc.listVideoCodecs()) {
|
for (PayloadType videoCodec : mLc.getVideoCodecs()) {
|
||||||
enableDisableVideoCodecs(videoCodec);
|
enableDisableVideoCodecs(videoCodec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -816,6 +825,10 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
||||||
boolean ilbc = LinphoneService.isReady() && LinphoneManager.getLc()
|
boolean ilbc = LinphoneService.isReady() && LinphoneManager.getLc()
|
||||||
.findPayloadType("iLBC", 8000)!=null;
|
.findPayloadType("iLBC", 8000)!=null;
|
||||||
e.putBoolean(getString(pref_codec_ilbc_key), ilbc);
|
e.putBoolean(getString(pref_codec_ilbc_key), ilbc);
|
||||||
|
|
||||||
|
boolean amr = LinphoneService.isReady() && LinphoneManager.getLc()
|
||||||
|
.findPayloadType("AMR", 8000)!=null;
|
||||||
|
e.putBoolean(getString(pref_codec_amr_key), amr);
|
||||||
|
|
||||||
e.commit();
|
e.commit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import static org.linphone.R.string.ec_calibrating;
|
||||||
import static org.linphone.R.string.ec_calibration_launch_message;
|
import static org.linphone.R.string.ec_calibration_launch_message;
|
||||||
import static org.linphone.R.string.pref_codec_ilbc_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_speex16_key;
|
||||||
|
import static org.linphone.R.string.pref_codec_amr_key;
|
||||||
import static org.linphone.R.string.pref_echo_canceller_calibration_key;
|
import static org.linphone.R.string.pref_echo_canceller_calibration_key;
|
||||||
import static org.linphone.R.string.pref_video_enable_key;
|
import static org.linphone.R.string.pref_video_enable_key;
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
|
||||||
private void detectVideoCodec(int id, String mime) {
|
private void detectVideoCodec(int id, String mime) {
|
||||||
findPreference(id).setEnabled(LinphoneManager.getInstance().detectVideoCodec(mime));
|
findPreference(id).setEnabled(LinphoneManager.getInstance().detectVideoCodec(mime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -90,6 +91,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
|
||||||
findPreference(pref_codec_speex16_key).setEnabled(true);
|
findPreference(pref_codec_speex16_key).setEnabled(true);
|
||||||
//findPreference(pref_codec_speex32_key)).setEnabled(enableIlbc);
|
//findPreference(pref_codec_speex32_key)).setEnabled(enableIlbc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
detectAudioCodec(pref_codec_amr_key,"AMR",8000);
|
||||||
|
|
||||||
// No video
|
// No video
|
||||||
if (Version.sdkStrictlyBelow(5) || !fastCpu || !LinphoneManager.getInstance().hasCamera()) {
|
if (Version.sdkStrictlyBelow(5) || !fastCpu || !LinphoneManager.getInstance().hasCamera()) {
|
||||||
|
|
|
@ -88,6 +88,7 @@ class LinphoneCoreImpl implements LinphoneCore {
|
||||||
private native void setRing(long nativePtr, String path);
|
private native void setRing(long nativePtr, String path);
|
||||||
private native String getRing(long nativePtr);
|
private native String getRing(long nativePtr);
|
||||||
private native long[] listVideoPayloadTypes(long nativePtr);
|
private native long[] listVideoPayloadTypes(long nativePtr);
|
||||||
|
private native long[] listAudioPayloadTypes(long nativePtr);
|
||||||
private native void enableKeepAlive(long nativePtr,boolean enable);
|
private native void enableKeepAlive(long nativePtr,boolean enable);
|
||||||
private native boolean isKeepAliveEnabled(long nativePtr);
|
private native boolean isKeepAliveEnabled(long nativePtr);
|
||||||
private native int startEchoCalibration(long nativePtr,Object data);
|
private native int startEchoCalibration(long nativePtr,Object data);
|
||||||
|
@ -413,7 +414,7 @@ class LinphoneCoreImpl implements LinphoneCore {
|
||||||
return getRing(nativePtr);
|
return getRing(nativePtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PayloadType[] listVideoCodecs() {
|
public PayloadType[] getVideoCodecs() {
|
||||||
long[] typesPtr = listVideoPayloadTypes(nativePtr);
|
long[] typesPtr = listVideoPayloadTypes(nativePtr);
|
||||||
if (typesPtr == null) return null;
|
if (typesPtr == null) return null;
|
||||||
|
|
||||||
|
@ -425,6 +426,18 @@ class LinphoneCoreImpl implements LinphoneCore {
|
||||||
|
|
||||||
return codecs;
|
return codecs;
|
||||||
}
|
}
|
||||||
|
public PayloadType[] getAudioCodecs() {
|
||||||
|
long[] typesPtr = listAudioPayloadTypes(nativePtr);
|
||||||
|
if (typesPtr == null) return null;
|
||||||
|
|
||||||
|
PayloadType[] codecs = new PayloadType[typesPtr.length];
|
||||||
|
|
||||||
|
for (int i=0; i < codecs.length; i++) {
|
||||||
|
codecs[i] = new PayloadTypeImpl(typesPtr[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return codecs;
|
||||||
|
}
|
||||||
public boolean isNetworkReachable() {
|
public boolean isNetworkReachable() {
|
||||||
throw new RuntimeException("Not implemented");
|
throw new RuntimeException("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
200
submodules/externals/build/opencore-amr/Android.mk
vendored
Normal file
200
submodules/externals/build/opencore-amr/Android.mk
vendored
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL_PATH:= $(call my-dir)/../../opencore-amr
|
||||||
|
|
||||||
|
BUILD_PATH:= $(call my-dir)
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
LOCAL_MODULE := libopencoreamr
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := \
|
||||||
|
amrnb/wrapper.cpp
|
||||||
|
|
||||||
|
ifeq ($(BUILD_AMR),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.
|
||||||
|
|
||||||
|
|
||||||
|
#common files
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES += \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/add.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/az_lsp.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/bitno_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/bitreorder_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/c2_9pf_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/div_s.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gains_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gc_pred.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/get_const_tbls.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gmed_n.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/grid_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gray_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/int_lpc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/inv_sqrt.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/inv_sqrt_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/l_shr_r.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/log2.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/log2_norm.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/log2_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsfwt.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_az.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_lsf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_lsf_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/mult_r.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/norm_l.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/norm_s.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/overflow_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/ph_disp_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/pred_lt.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_5.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_5_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/qua_gain_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/reorder.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/residu.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/round.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/shr.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/shr_r.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l_tbl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/sub.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/syn_filt.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/weight_a.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/window_tab.cpp
|
||||||
|
|
||||||
|
#encoder files
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES += \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/amrencode.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/autocorr.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c1035pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c2_11pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c2_9pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c3_14pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c4_17pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c8_31pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/calc_cor.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/calc_en.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cbsearch.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cl_ltp.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cod_amr.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/convolve.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cor_h.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cor_h_x.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cor_h_x2.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/corrwght_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/div_32.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/dtx_enc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/enc_lag3.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/enc_lag6.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/enc_output_format_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ets_to_if2.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ets_to_wmf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/g_adapt.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/g_code.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/g_pitch.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/gain_q.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/hp_max.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/inter_36.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/inter_36_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_abs.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_comp.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_extract.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_negate.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/lag_wind.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/lag_wind_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/levinson.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/lpc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ol_ltp.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/p_ol_wgh.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pitch_fr.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pitch_ol.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pre_big.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pre_proc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/prm2bits.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/q_gain_c.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/q_gain_p.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/qgain475.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/qgain795.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/qua_gain.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/s10_8pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/set_sign.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/sid_sync.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/sp_enc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/spreproc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/spstproc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ton_stab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/vad1.cpp
|
||||||
|
|
||||||
|
#decoder files
|
||||||
|
# opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/decoder_gsm_amr.cpp \
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES += \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/a_refl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/agc.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/amrdecode.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/b_cn_cod.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/bgnscd.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/c_g_aver.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d1035pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d2_11pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d2_9pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d3_14pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d4_17pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d8_31pf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_c.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_p.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_3.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_5.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_amr.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_gain.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_input_format_tab.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_lag3.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_lag6.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dtx_dec.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/ec_gains.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/ex_ctrl.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/if2_to_ets.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/int_lsf.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/lsp_avg.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/ph_disp.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/post_pro.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/preemph.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/pstfilt.cpp \
|
||||||
|
opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/qgain475_tab.cpp \
|
||||||
|
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 \
|
||||||
|
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/include \
|
||||||
|
$(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src \
|
||||||
|
$(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)/oscl
|
||||||
|
|
||||||
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|
||||||
|
|
116
submodules/externals/build/opencore-amr/stubs.cpp
vendored
Normal file
116
submodules/externals/build/opencore-amr/stubs.cpp
vendored
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
|
||||||
|
#define AMRNB_WRAPPER_INTERNAL
|
||||||
|
#include <sp_dec.h>
|
||||||
|
#include <amrdecode.h>
|
||||||
|
#include <amrencode.h>
|
||||||
|
#include "interf_dec.h"
|
||||||
|
#include "interf_enc.h"
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
static Word16 (*sym_AMRDecode)(
|
||||||
|
void *state_data,
|
||||||
|
enum Frame_Type_3GPP frame_type,
|
||||||
|
UWord8 *speech_bits_ptr,
|
||||||
|
Word16 *raw_pcm_buffer,
|
||||||
|
bitstream_format input_format
|
||||||
|
);
|
||||||
|
|
||||||
|
static void (*sym_GSMDecodeFrameExit)(void **state_data);
|
||||||
|
|
||||||
|
static Word16 (*sym_GSMInitDecode)(void **state_data, Word8 *id);
|
||||||
|
|
||||||
|
static Word16 (*sym_AMREncodeInit)(
|
||||||
|
void **pEncStructure,
|
||||||
|
void **pSidSyncStructure,
|
||||||
|
Flag dtx_enable);
|
||||||
|
|
||||||
|
static void (*sym_AMREncodeExit)(
|
||||||
|
void **pEncStructure,
|
||||||
|
void **pSidSyncStructure);
|
||||||
|
|
||||||
|
static Word16 (*sym_AMREncode)(
|
||||||
|
void *pEncState,
|
||||||
|
void *pSidSyncState,
|
||||||
|
enum Mode mode,
|
||||||
|
Word16 *pEncInput,
|
||||||
|
UWord8 *pEncOutput,
|
||||||
|
enum Frame_Type_3GPP *p3gpp_frame_type,
|
||||||
|
Word16 output_format);
|
||||||
|
|
||||||
|
extern "C"{
|
||||||
|
|
||||||
|
Word16 AMREncodeInit(
|
||||||
|
void **pEncStructure,
|
||||||
|
void **pSidSyncStructure,
|
||||||
|
Flag dtx_enable){
|
||||||
|
return sym_AMREncodeInit(pEncStructure,pSidSyncStructure,dtx_enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AMREncodeExit(
|
||||||
|
void **pEncStructure,
|
||||||
|
void **pSidSyncStructure){
|
||||||
|
return sym_AMREncodeExit(pEncStructure,pSidSyncStructure);
|
||||||
|
}
|
||||||
|
|
||||||
|
Word16 AMREncode(
|
||||||
|
void *pEncState,
|
||||||
|
void *pSidSyncState,
|
||||||
|
enum Mode mode,
|
||||||
|
Word16 *pEncInput,
|
||||||
|
UWord8 *pEncOutput,
|
||||||
|
enum Frame_Type_3GPP *p3gpp_frame_type,
|
||||||
|
Word16 output_format){
|
||||||
|
int err=sym_AMREncode(pEncState,pSidSyncState,mode,pEncInput,pEncOutput,p3gpp_frame_type,AMR_TX_WMF /*AMR_TX_IETF*/);
|
||||||
|
/*IETF format not supported by versions of opencore amr up to android 2.3, thus we ask WMF and fix after*/
|
||||||
|
/*both formats seems identical except the first byte.*/
|
||||||
|
pEncOutput[0]=(*p3gpp_frame_type)<<3;
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
Word16 AMRDecode(
|
||||||
|
void *state_data,
|
||||||
|
enum Frame_Type_3GPP frame_type,
|
||||||
|
UWord8 *speech_bits_ptr,
|
||||||
|
Word16 *raw_pcm_buffer,
|
||||||
|
bitstream_format input_format
|
||||||
|
){
|
||||||
|
return sym_AMRDecode(state_data,frame_type,speech_bits_ptr,raw_pcm_buffer,input_format);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GSMDecodeFrameExit(void **state_data){
|
||||||
|
return sym_GSMDecodeFrameExit(state_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
Word16 GSMInitDecode(void **state_data, Word8 *id){
|
||||||
|
return sym_GSMInitDecode(state_data,id);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LOAD_SYMBOL(symbol) \
|
||||||
|
{ \
|
||||||
|
*((void**)&sym_##symbol)=dlsym(handle,#symbol); \
|
||||||
|
if (sym_##symbol==NULL) { \
|
||||||
|
*missing=#symbol; \
|
||||||
|
return -1; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
int opencore_amr_wrapper_init(const char **missing){
|
||||||
|
void *handle=dlopen("libstagefright.so",RTLD_GLOBAL);
|
||||||
|
if (handle==NULL){
|
||||||
|
*missing="libstagefright.so";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
LOAD_SYMBOL(AMRDecode);
|
||||||
|
LOAD_SYMBOL(GSMDecodeFrameExit)
|
||||||
|
LOAD_SYMBOL(GSMInitDecode);
|
||||||
|
LOAD_SYMBOL(AMREncodeInit);
|
||||||
|
LOAD_SYMBOL(AMREncodeExit);
|
||||||
|
LOAD_SYMBOL(AMREncode);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}//end of extern "C"
|
||||||
|
|
||||||
|
|
10
submodules/externals/build/opencore-amr/stubs.h
vendored
Normal file
10
submodules/externals/build/opencore-amr/stubs.h
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
|
||||||
|
#define GSMDecodeFrameExit my_GSMDecodeFrameExit
|
||||||
|
#define GSMInitDecode my_GSMInitDecode
|
||||||
|
#define AMRDecode my_AMRDecode
|
||||||
|
#define AMREncodeInit my_AMREncodeInit
|
||||||
|
#define AMREncodeExit my_AMREncodeExit
|
||||||
|
#define AMREncode my_AMREncode
|
||||||
|
|
||||||
|
|
1
submodules/externals/opencore-amr
vendored
Submodule
1
submodules/externals/opencore-amr
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit c1d74140f421e21f8f732e91b4baf9a7cc3f157b
|
|
@ -1 +1 @@
|
||||||
Subproject commit e8318e75125045566366707d10f1ca8d08536da6
|
Subproject commit 749c984e862a617146869cee5b1de5de3bfc6103
|
1
submodules/msamr
Submodule
1
submodules/msamr
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 08a333f7bc7e45f218cf7bf0d6ab7081cbce3b17
|
Loading…
Reference in a new issue