From 2dd563e3819ab4da3eaad4703fc3dac91b22a431 Mon Sep 17 00:00:00 2001 From: Johan Pascal Date: Fri, 21 Aug 2015 18:06:12 +0200 Subject: [PATCH] Add codec2 submodules - update linphone --- .gitmodules | 3 + Makefile | 28 +++- README | 3 + jni/Android.mk | 5 + jni/Application.mk | 8 + submodules/externals/build/codec2/Android.mk | 43 +++++ .../build/codec2/codec2_prefixed_symbols.h | 154 ++++++++++++++++++ submodules/linphone | 2 +- submodules/mscodec2 | 1 + 9 files changed, 244 insertions(+), 3 deletions(-) create mode 100644 submodules/externals/build/codec2/Android.mk create mode 100644 submodules/externals/build/codec2/codec2_prefixed_symbols.h create mode 160000 submodules/mscodec2 diff --git a/.gitmodules b/.gitmodules index 3138e5888..21d5755ff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -91,3 +91,6 @@ [submodule "submodules/externals/webrtc"] path = submodules/externals/webrtc url = git://git.linphone.org/webrtc.git +[submodule "submodules/mscodec2"] + path = submodules/mscodec2 + url = git://git.linphone.org/mscodec2.git diff --git a/Makefile b/Makefile index 08ed199c8..ae73fd666 100644 --- a/Makefile +++ b/Makefile @@ -60,6 +60,7 @@ BUILD_CONTACT_HEADER=0 BUILD_RTP_MAP=0 BUILD_DONT_CHECK_HEADERS_IN_MESSAGE=0 BUILD_ILBC=1 +BUILD_CODEC2=0 LIBLINPHONE_EXTENDED_SRC_FILES= LIBLINPHONE_EXTENDED_C_INCLUDES= LIBLINPHONE_EXTENDED_CFLAGS= @@ -255,6 +256,29 @@ clean-x264: rm -rf $(X264_BUILD_DIR)/arm && \ rm -rf $(X264_BUILD_DIR)/x86 +#codec2 +ifeq ($(BUILD_CODEC2),1) +CODEC2_SRC_DIR=$(TOPDIR)/submodules/externals/codec2 +CODEC2_BUILD_DIR=$(TOPDIR)/submodules/externals/build/codec2 +PREPARE_CODEC2_DEPS=codec2-install-headers +endif + +fetch-codec2: +ifneq "$(wildcard $(CODEC2_SRC_DIR) )" "" + # source directory for codec2 already exists, update it + svn up $(CODEC2_SRC_DIR) +else + #source directory for codec2 doesn't exist, create it and fetch the source from svn depot + mkdir $(CODEC2_SRC_DIR) + svn co https://svn.code.sf.net/p/freetel/code/codec2/branches/0.3/ $(CODEC2_SRC_DIR) +endif + +codec2-install-headers: fetch-codec2 + mkdir -p $(CODEC2_SRC_DIR)/include/codec2 + rsync -rvLpgoc $(CODEC2_SRC_DIR)/src/codec2.h $(CODEC2_SRC_DIR)/include/codec2/codec2.h + +prepare-codec2: $(PREPARE_CODEC2_DEPS) + #openh264 ifeq ($(BUILD_VIDEO),1) ifeq ($(BUILD_OPENH264), 1) @@ -409,10 +433,10 @@ $(MATROSKA_SRC_DIR)/patch_applied.txt: $(MATROSKA_BUILD_DIR)/fix_libmatroska2.pa cd $(MATROSKA_SRC_DIR); patch -p1 < $<; touch $@ #Build targets -prepare-sources: build-ffmpeg build-x264 build-openh264 prepare-ilbc build-vpx prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-matroska2 +prepare-sources: build-ffmpeg build-x264 build-openh264 prepare-ilbc build-vpx prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-matroska2 prepare-codec2 GENERATE_OPTIONS = NDK_DEBUG=$(NDK_DEBUG) BUILD_FOR_X86=$(BUILD_FOR_X86) \ - BUILD_AMRNB=$(BUILD_AMRNB) BUILD_AMRWB=$(BUILD_AMRWB) BUILD_SILK=$(BUILD_SILK) BUILD_G729=$(BUILD_G729) BUILD_OPUS=$(BUILD_OPUS) \ + BUILD_AMRNB=$(BUILD_AMRNB) BUILD_AMRWB=$(BUILD_AMRWB) BUILD_SILK=$(BUILD_SILK) BUILD_G729=$(BUILD_G729) BUILD_OPUS=$(BUILD_OPUS) BUILD_CODEC2=$(BUILD_CODEC2)\ BUILD_VIDEO=$(BUILD_VIDEO) BUILD_X264=$(BUILD_X264) BUILD_OPENH264=$(BUILD_OPENH264) ENABLE_OPENH264_DECODER=$(ENABLE_OPENH264_DECODER) BUILD_MATROSKA=$(BUILD_MATROSKA) \ BUILD_UPNP=$(BUILD_UPNP) BUILD_ZRTP=$(BUILD_ZRTP) BUILD_WEBRTC_AECM=$(BUILD_WEBRTC_AECM) BUILD_WEBRTC_ISAC=$(BUILD_WEBRTC_ISAC) BUILD_ILBC=$(BUILD_ILBC) \ BUILD_FOR_ARM=$(BUILD_FOR_ARM) BUILD_NON_FREE_CODECS=$(BUILD_NON_FREE_CODECS) diff --git a/README b/README index 1ceb2271b..960700b70 100644 --- a/README +++ b/README @@ -144,3 +144,6 @@ BUILD_MATROSKA BUILD_ILBC values: 0 (don't build iLBC), 1 (do build iLBC), default value: 1 + +BUILD_CODEC2 + values: 0 (don't build codec2 support), 1 (do build codec2 support), default value: 0 diff --git a/jni/Android.mk b/jni/Android.mk index c1951fdde..4a2928c3e 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -86,6 +86,11 @@ ifeq ($(BUILD_ILBC), 1) include $(linphone-root-dir)/submodules/msilbc/Android.mk endif +ifeq ($(BUILD_CODEC2), 1) +include $(linphone-root-dir)/submodules/mscodec2/Android.mk +include $(linphone-root-dir)/submodules/externals/build/codec2/Android.mk +endif + ifeq ($(_BUILD_VIDEO),1) ifeq ($(_BUILD_X264),1) diff --git a/jni/Application.mk b/jni/Application.mk index 62337407e..ab32cd6d1 100644 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -36,6 +36,10 @@ ifeq ($(BUILD_G729),) BUILD_G729=0 endif +ifeq ($(BUILD_CODEC2),) +BUILD_CODEC2=0 +endif + ifeq ($(BUILD_VIDEO),) BUILD_VIDEO=1 endif @@ -127,6 +131,10 @@ ifeq ($(BUILD_ZRTP), 1) APP_MODULES += libbzrtp endif +ifeq ($(BUILD_CODEC2), 1) +APP_MODULES +=libcodec2 libmscodec2 +endif + ifeq ($(BUILD_ILBC), 1) APP_MODULES +=libmsilbc endif diff --git a/submodules/externals/build/codec2/Android.mk b/submodules/externals/build/codec2/Android.mk new file mode 100644 index 000000000..18c2a4119 --- /dev/null +++ b/submodules/externals/build/codec2/Android.mk @@ -0,0 +1,43 @@ +LOCAL_PATH:= $(call my-dir)/../../codec2 + +BUILD_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libcodec2 + + +LOCAL_SRC_FILES += \ + src/dump.c \ + src/lpc.c \ + src/nlp.c \ + src/postfilter.c \ + src/sine.c \ + src/codec2.c \ + src/fifo.c \ + src/fdmdv.c \ + src/kiss_fft.c \ + src/interp.c \ + src/lsp.c \ + src/phase.c \ + src/quantise.c \ + src/pack.c \ + src/codebook.c \ + src/codebookd.c \ + src/codebookvq.c \ + src/codebookjnd.c \ + src/codebookjvm.c \ + src/codebookvqanssi.c \ + src/codebookdt.c \ + src/codebookge.c \ + src/golay23.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/src + +LOCAL_CFLAGS := -ffast-math -include $(BUILD_PATH)/codec2_prefixed_symbols.h + + +LOCAL_ARM_MODE := arm + +include $(BUILD_STATIC_LIBRARY) diff --git a/submodules/externals/build/codec2/codec2_prefixed_symbols.h b/submodules/externals/build/codec2/codec2_prefixed_symbols.h new file mode 100644 index 000000000..d2aefca1a --- /dev/null +++ b/submodules/externals/build/codec2/codec2_prefixed_symbols.h @@ -0,0 +1,154 @@ +/* This file was created extracting exported symbol of codec2 library + * The purpose is to avoid name collision with other libraries + * This was done by the following command + * nm libcodec2.so|grep " T "|sed 's/^.*\ T\ \(.*\)/#define\ \1 codec2_\1/' + * */ +#define autocorrelate codec2_autocorrelate +#define de_emp codec2_de_emp +#define find_aks codec2_find_aks +#define hanning_window codec2_hanning_window +#define inverse_filter codec2_inverse_filter +#define levinson_durbin codec2_levinson_durbin +#define pre_emp codec2_pre_emp +#define synthesis_filter codec2_synthesis_filter +#define weight codec2_weight +#define nlp codec2_nlp +#define nlp_create codec2_nlp_create +#define nlp_destroy codec2_nlp_destroy +#define post_process_mbe codec2_post_process_mbe +#define post_process_sub_multiples codec2_post_process_sub_multiples +#define test_candidate_mbe codec2_test_candidate_mbe +#define postfilter codec2_postfilter +#define codec2_rand codec2_codec2_rand +#define dft_speech codec2_dft_speech +#define estimate_amplitudes codec2_estimate_amplitudes +#define est_voicing_mbe codec2_est_voicing_mbe +#define hpf codec2_hpf +#define hs_pitch_refinement codec2_hs_pitch_refinement +#define make_analysis_window codec2_make_analysis_window +#define make_synthesis_window codec2_make_synthesis_window +#define synthesise codec2_synthesise +#define two_stage_pitch_refinement codec2_two_stage_pitch_refinement +#define analyse_one_frame codec2_analyse_one_frame +#define codec2_bits_per_frame codec2_codec2_bits_per_frame +#define codec2_create codec2_codec2_create +#define codec2_decode codec2_codec2_decode +#define codec2_decode_1200 codec2_codec2_decode_1200 +#define codec2_decode_1300 codec2_codec2_decode_1300 +#define codec2_decode_1400 codec2_codec2_decode_1400 +#define codec2_decode_1600 codec2_codec2_decode_1600 +#define codec2_decode_2400 codec2_codec2_decode_2400 +#define codec2_decode_3200 codec2_codec2_decode_3200 +#define codec2_decode_ber codec2_codec2_decode_ber +#define codec2_destroy codec2_codec2_destroy +#define codec2_encode codec2_codec2_encode +#define codec2_encode_1200 codec2_codec2_encode_1200 +#define codec2_encode_1300 codec2_codec2_encode_1300 +#define codec2_encode_1400 codec2_codec2_encode_1400 +#define codec2_encode_1600 codec2_codec2_encode_1600 +#define codec2_encode_2400 codec2_codec2_encode_2400 +#define codec2_encode_3200 codec2_codec2_encode_3200 +#define codec2_get_spare_bit_index codec2_codec2_get_spare_bit_index +#define codec2_rebuild_spare_bit codec2_codec2_rebuild_spare_bit +#define codec2_samples_per_frame codec2_codec2_samples_per_frame +#define codec2_set_lpc_post_filter codec2_codec2_set_lpc_post_filter +#define codec2_set_natural_or_gray codec2_codec2_set_natural_or_gray +#define synthesise_one_frame codec2_synthesise_one_frame +#define fifo_create codec2_fifo_create +#define fifo_destroy codec2_fifo_destroy +#define fifo_read codec2_fifo_read +#define fifo_used codec2_fifo_used +#define fifo_write codec2_fifo_write +#define bits_to_dqpsk_symbols codec2_bits_to_dqpsk_symbols +#define calc_snr codec2_calc_snr +#define fdm_downconvert codec2_fdm_downconvert +#define fdmdv_48_to_8 codec2_fdmdv_48_to_8 +#define fdmdv_8_to_48 codec2_fdmdv_8_to_48 +#define fdmdv_bits_per_frame codec2_fdmdv_bits_per_frame +#define fdmdv_create codec2_fdmdv_create +#define fdmdv_demod codec2_fdmdv_demod +#define fdmdv_destroy codec2_fdmdv_destroy +#define fdmdv_dump_osc_mags codec2_fdmdv_dump_osc_mags +#define fdmdv_error_pattern_size codec2_fdmdv_error_pattern_size +#define fdmdv_freq_shift codec2_fdmdv_freq_shift +#define fdmdv_get_demod_stats codec2_fdmdv_get_demod_stats +#define fdmdv_get_fsep codec2_fdmdv_get_fsep +#define fdmdv_get_rx_spectrum codec2_fdmdv_get_rx_spectrum +#define fdmdv_get_test_bits codec2_fdmdv_get_test_bits +#define fdmdv_mod codec2_fdmdv_mod +#define fdmdv_put_test_bits codec2_fdmdv_put_test_bits +#define fdmdv_set_fsep codec2_fdmdv_set_fsep +#define fdmdv_use_old_qpsk_mapping codec2_fdmdv_use_old_qpsk_mapping +#define fdm_upconvert codec2_fdm_upconvert +#define freq_state codec2_freq_state +#define generate_pilot_fdm codec2_generate_pilot_fdm +#define generate_pilot_lut codec2_generate_pilot_lut +#define lpf_peak_pick codec2_lpf_peak_pick +#define qpsk_to_bits codec2_qpsk_to_bits +#define rx_est_freq_offset codec2_rx_est_freq_offset +#define rx_est_timing codec2_rx_est_timing +#define rx_filter codec2_rx_filter +#define snr_update codec2_snr_update +#define tx_filter codec2_tx_filter +#define kiss_fft codec2_kiss_fft +#define kiss_fft_alloc codec2_kiss_fft_alloc +#define kiss_fft_cleanup codec2_kiss_fft_cleanup +#define kiss_fft_next_fast_size codec2_kiss_fft_next_fast_size +#define kiss_fft_stride codec2_kiss_fft_stride +#define interp_energy codec2_interp_energy +#define interp_energy2 codec2_interp_energy2 +#define interpolate codec2_interpolate +#define interpolate_lsp codec2_interpolate_lsp +#define interpolate_lsp_ver2 codec2_interpolate_lsp_ver2 +#define interp_Wo codec2_interp_Wo +#define interp_Wo2 codec2_interp_Wo2 +#define sample_log_amp codec2_sample_log_amp +#define lpc_to_lsp codec2_lpc_to_lsp +#define lsp_to_lpc codec2_lsp_to_lpc +#define aks_to_H codec2_aks_to_H +#define phase_synth_zero_order codec2_phase_synth_zero_order +#define aks_to_M2 codec2_aks_to_M2 +#define apply_lpc_correction codec2_apply_lpc_correction +#define bw_expand_lsps codec2_bw_expand_lsps +#define bw_expand_lsps2 codec2_bw_expand_lsps2 +#define check_lsp_order codec2_check_lsp_order +#define compute_weights codec2_compute_weights +#define compute_weights2 codec2_compute_weights2 +#define compute_weights_anssi_mode2 codec2_compute_weights_anssi_mode2 +#define decode_energy codec2_decode_energy +#define decode_lspds_scalar codec2_decode_lspds_scalar +#define decode_lsps_scalar codec2_decode_lsps_scalar +#define decode_lsps_vq codec2_decode_lsps_vq +#define decode_Wo codec2_decode_Wo +#define decode_Wo_dt codec2_decode_Wo_dt +#define decode_WoE codec2_decode_WoE +#define encode_energy codec2_encode_energy +#define encode_lspds_scalar codec2_encode_lspds_scalar +#define encode_lsps_scalar codec2_encode_lsps_scalar +#define encode_lsps_vq codec2_encode_lsps_vq +#define encode_Wo codec2_encode_Wo +#define encode_Wo_dt codec2_encode_Wo_dt +#define encode_WoE codec2_encode_WoE +#define find_nearest codec2_find_nearest +#define find_nearest_weighted codec2_find_nearest_weighted +#define force_min_lsp_dist codec2_force_min_lsp_dist +#define locate_lsps_jnd_steps codec2_locate_lsps_jnd_steps +#define lpc_post_filter codec2_lpc_post_filter +#define lsp_bits codec2_lsp_bits +#define lspd_bits codec2_lspd_bits +#define lspjvm_quantise codec2_lspjvm_quantise +#define lsp_pred_vq_bits codec2_lsp_pred_vq_bits +#define quantise codec2_quantise +#define quantise_init codec2_quantise_init +#define quantise_WoE codec2_quantise_WoE +#define speech_to_uq_lsps codec2_speech_to_uq_lsps +#define pack codec2_pack +#define pack_natural_or_gray codec2_pack_natural_or_gray +#define unpack codec2_unpack +#define unpack_natural_or_gray codec2_unpack_natural_or_gray +#define get_syndrome codec2_get_syndrome +#define golay23_count_errors codec2_golay23_count_errors +#define golay23_decode codec2_golay23_decode +#define golay23_encode codec2_golay23_encode +#define golay23_init codec2_golay23_init +#define nextcomb codec2_nextcomb diff --git a/submodules/linphone b/submodules/linphone index c578229f9..7cbb44281 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit c578229f92c9da940e01639df1998480180ab309 +Subproject commit 7cbb44281c1ab12d90b3b712d2a9087df66207d2 diff --git a/submodules/mscodec2 b/submodules/mscodec2 new file mode 160000 index 000000000..64df6cb53 --- /dev/null +++ b/submodules/mscodec2 @@ -0,0 +1 @@ +Subproject commit 64df6cb53ceacdea74a021e83f664e9aaa140ef8