- Install some linphone dependencies with macports
$ port install speex
- $ port install osip2
- $ port install eXosip2
+ $ port install libosip2
+ $ port install libeXosip2
$ port install ffmpeg-devel
- Install SDL (for video display)
$ port install sdl-devel
- Install gtk. It is recommended to use the quartz backend for better integration.
+ $ port install cairo +quartz +no_x11
+ $ port install pango +quartz +no_x11
$ port install gtk2 +quartz +no_x11
$ port install ige-mac-integration
$ port install hicolor-icon-theme
endif
ifeq ($(LINPHONE_VIDEO),1)
+LOCAL_LDLIBS += -lGLESv2
LOCAL_STATIC_LIBRARIES += libvpx
ifeq ($(BUILD_X264),1)
LOCAL_STATIC_LIBRARIES += \
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS += -DHAVE_ILBC=1
LOCAL_STATIC_LIBRARIES += libmsilbc
-else
-LOCAL_STATIC_LIBRARIES += $(LIBLINPHONE_EXTENDED_STATIC_LIBS)
-LOCAL_SRC_FILES += $(LIBLINPHONE_EXTENDED_SRC_FILES)
LOCAL_C_INCLUDES += $(LIBLINPHONE_EXTENDED_C_INCLUDES)
endif
+LOCAL_STATIC_LIBRARIES += $(LIBLINPHONE_EXTENDED_STATIC_LIBS)
+LOCAL_SRC_FILES += $(LIBLINPHONE_EXTENDED_SRC_FILES)
+
LOCAL_LDLIBS += -lGLESv2
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SHARED_LIBRARIES += liblinssl liblincrypto
${prefix}/lib/gdk-pixbuf-2.0
</binary>
- <binary>
+ <data>
${prefix}/share/mime/globs
- </binary>
+ </data>
<binary>
${prefix}/lib/pango/${pkg:pango:pango_module_version}/modules/*.so
"${bundle}", which refers to the bundle root directory.
-->
<data>
- ${prefix:linphone}/share
+ ${prefix:linphone}/share/linphone
+ </data>
+
+ <data>
+ ${prefix:linphone}/share/pixmaps/linphone
</data>
<!-- Copy in the themes data. You may want to trim this to save space
${project}/../../gtk/gtkrc.mac
</data>
- <data dest="${bundle}/Contents/Resources/share/sounds/linphone">
- ${prefix:linphone}/share/sounds/linphone/
+ <data dest="${bundle}/Contents/Resources/share/sounds/linphone/rings/oldphone.wav">
+ ${prefix:linphone}/share/sounds/linphone/rings/oldphone.wav
+ </data>
+
+ <data dest="${bundle}/Contents/Resources/share/sounds/linphone/ringback.wav">
+ ${prefix:linphone}/share/sounds/linphone/ringback.wav
</data>
<!-- Icon themes to copy. The "icons" property can be either of
lc->ecc=ec_calibrator_new(lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard,rate,cb,cb_data);
return 0;
}
+
if (lc->ecc->cb)
lc->ecc->cb(lc,ecs,lc->ecc->delay,lc->ecc->cb_data);
if (ecs==LinphoneEcCalibratorDone){
- lp_config_set_int(lc->config, "sound", "ec_delay",MAX(lc->ecc->delay-10,0));
+ int len=lp_config_get_int(lc->config,"sound","ec_tail_len",0);
+ lp_config_set_int(lc->config, "sound", "ec_delay",MAX(lc->ecc->delay-(len/2),0));
}
ec_calibrator_destroy(lc->ecc);
lc->ecc=NULL;
,jboolean enable) {
linphone_core_enable_echo_cancellation((LinphoneCore*)lc,enable);
}
+extern "C" void Java_org_linphone_core_LinphoneCoreImpl_enableEchoLimiter(JNIEnv* env
+ ,jobject thiz
+ ,jlong lc
+ ,jboolean enable) {
+ linphone_core_enable_echo_limiter((LinphoneCore*)lc,enable);
+}
extern "C" jboolean Java_org_linphone_core_LinphoneCoreImpl_isEchoCancellationEnabled(JNIEnv* env
,jobject thiz
,jlong lc
static gchar *workingdir=NULL;
static char *progpath=NULL;
gchar *linphone_logfile=NULL;
-static gboolean app_terminated=FALSE;
static GOptionEntry linphone_options[]={
{
linphone_core_enable_video_preview(linphone_gtk_get_core(),FALSE);
}else{
linphone_core_enable_video_preview(linphone_gtk_get_core(),
- linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT));
+ linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT) && linphone_core_video_enabled(linphone_gtk_get_core()));
}
return FALSE;
}
}
}
+static void linphone_gtk_quit(void){
+ gdk_threads_leave();
+ linphone_gtk_destroy_log_window();
+ linphone_core_destroy(the_core);
+ linphone_gtk_log_uninit();
+}
+
#ifdef HAVE_GTK_OSX
+/*
+This is not the correct way to implement block termination.
+The good way would be to call gtk_main_quit(), and return TRUE.
+Unfortunately this does not work, because if we return TRUE the NSApplication sometimes calls the CFRunLoop recursively, which prevents gtk_main() to exit.
+As a result the program cannot exit at all.
+As a workaround we do all the cleanup (unregistration and config save) within the handler.
+*/
static gboolean on_block_termination(void){
gtk_main_quit();
- g_message("Block termination returning %i",!app_terminated);
- return !app_terminated;
+ linphone_gtk_quit();
+ return FALSE;
}
#endif
linphone_gtk_check_for_new_version();
gtk_main();
- gdk_threads_leave();
- linphone_gtk_destroy_log_window();
- linphone_core_destroy(the_core);
- linphone_gtk_log_uninit();
- app_terminated=TRUE;
+ linphone_gtk_quit();
#ifndef HAVE_GTK_OSX
/*workaround a bug on win32 that makes status icon still present in the systray even after program exit.*/
gtk_status_icon_set_visible(icon,FALSE);
static public class EcCalibratorStatus {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
+ public static final int IN_PROGRESS_STATUS=0;
+ public static final int DONE_STATUS=1;
+ public static final int FAILED_STATUS=2;
/**
* Calibration in progress
*/
- static public EcCalibratorStatus InProgress = new EcCalibratorStatus(0,"InProgress");
+ static public EcCalibratorStatus InProgress = new EcCalibratorStatus(IN_PROGRESS_STATUS,"InProgress");
/**
* Calibration done
*/
- static public EcCalibratorStatus Done = new EcCalibratorStatus(1,"Done");
+ static public EcCalibratorStatus Done = new EcCalibratorStatus(DONE_STATUS,"Done");
/**
* Calibration in progress
*/
- static public EcCalibratorStatus Failed = new EcCalibratorStatus(2,"Failed");
+ static public EcCalibratorStatus Failed = new EcCalibratorStatus(FAILED_STATUS,"Failed");
private final int mValue;
private final String mStringValue;
boolean pauseAllCalls();
void setZrtpSecretsCache(String file);
+ public void enableEchoLimiter(boolean val);
}
-Subproject commit 7c091db48e2ac5b785ced3964a386ec51f695a60
+Subproject commit bddf312c1b7852d1b29c6b476d207133c5f31ff2