dnl Process this file with autoconf to produce a configure script.
- AC_INIT([linphone],[3.4.3],[linphone-developers@nongnu.org])
+ AC_INIT([linphone],[3.4.99.1],[linphone-developers@nongnu.org])
AC_CANONICAL_SYSTEM
AC_CONFIG_SRCDIR([coreapi/linphonecore.c])
AM_PROG_CC_STDC
AC_HEADER_STDC
AM_PROG_CC_C_O
+ AC_CHECK_PROGS(MD5SUM,[md5sum md5])
+ AM_CONDITIONAL(HAVE_MD5SUM,test -n $MD5SUM)
-case $target_os in
+case $target in
*mingw32ce)
CFLAGS="$CFLAGS -D_WIN32_WCE -DORTP_STATIC -D_WIN32_WINNT=0x0501"
CXXFLAGS="$CXXFLAGS -DORTP_STATIC -D_WIN32_WINNT=0x0501"
CONSOLE_FLAGS="-mconsole"
mingw_found=yes
;;
- *darwin*)
+ armv6-apple-darwin|armv7-apple-darwin|i386-apple-darwin)
+ CFLAGS="$CFLAGS -DTARGET_OS_IPHONE "
+ build_tests=no
+ ios_found=yes
+ ;;
+ x86_64-apple-darwin*|i686-apple-darwin*)
+ MSPLUGINS_CFLAGS=""
dnl use macport installation
ACLOCAL_MACOS_FLAGS="-I /opt/local/share/aclocal"
build_macos=yes
- ;;
+ ;;
+
esac
AC_SUBST(ACLOCAL_MACOS_FLAGS)
dnl localization tools
IT_PROG_INTLTOOL([0.40], [no-xml])
+AM_CONDITIONAL(BUILD_TESTS,test x$build_tests != xno)
dnl Initialize libtool
LT_INIT([win32-dll shared disable-static])
yes) relativeprefix=yes ;;
no) relativeprefix=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-relativeprefix) ;;
- esac],[relativeprefix=auto])
+ esac],[relativeprefix=guess])
AC_ARG_ENABLE(date,
[ --enable-date Use build date in internal version number],
package_prefix=${prefix}
fi
- if test "$relativeprefix" = "auto" ; then
- case $target_os in
- *darwin*)
- if test "$enable_x11" = "false" ; then
- relativeprefix=yes
- fi
- ;;
- *mingw*)
- relativeprefix=yes
- ;;
- esac
+ if test "$relativeprefix" = "guess" ; then
+ if test "$mingw_found" = "yes" ; then
+ relativeprefix="yes"
+ fi
fi
if test "$relativeprefix" = "yes" ; then
AC_SUBST([ORTP_VERSION])
AC_SUBST([ORTP_DIR])
+ AC_ARG_ENABLE(tests_enabled,
+ [ --disable-tests Disable compilation of tests],
+ [case "${enableval}" in
+ yes) tests_enabled=true ;;
+ no) tests_enabled=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --disable-tests) ;;
+ esac],[tests_enabled=false])
+ AM_CONDITIONAL(ENABLE_TESTS, test x$tests_enabled = xyes)
+
dnl ##################################################
dnl # Check for doxygen
dnl ##################################################
return TRUE;
}
+ #define RANK_END 10000
static const char *codec_pref_order[]={
"speex",
+ "iLBC",
+ "amr",
"gsm",
"pcmu",
"pcma",
+ "VP8-DRAFT-0-3-2",
"H264",
"MP4V-ES",
- "theora",
"H263-1998",
- "H263",
- "x-snow",
NULL,
};
int i;
for(i=0;codec_pref_order[i]!=NULL;++i){
if (strcasecmp(codec_pref_order[i],mime)==0)
- break;
+ return i;
}
- return i;
+ return RANK_END;
}
static int codec_compare(const PayloadType *a, const PayloadType *b){
}
if (pt && ms_filter_codec_supported(pt->mime_type)){
if (ms_list_find(l,pt)==NULL){
- /*do not enable old or experimental codecs by default*/
- if (strcasecmp(pt->mime_type,"H263")!=0 && strcasecmp(pt->mime_type,"x-snow")!=0){
+ /*unranked codecs are disabled by default*/
+ if (find_codec_rank(pt->mime_type)!=RANK_END){
payload_type_set_flag(pt,PAYLOAD_TYPE_ENABLED);
}
ms_message("Adding new codec %s/%i with fmtp %s",
return liblinphone_version;
}
-
- static MSList *linphone_payload_types=NULL;
-
- static void linphone_core_assign_payload_type(PayloadType *const_pt, int number, const char *recv_fmtp){
+ static void linphone_core_assign_payload_type(LinphoneCore *lc, PayloadType *const_pt, int number, const char *recv_fmtp){
PayloadType *pt;
pt=payload_type_clone(const_pt);
+ if (number==-1){
+ /*look for a free number */
+ MSList *elem;
+ int i;
+ for(i=lc->dyn_pt;i<=127;++i){
+ bool_t already_assigned=FALSE;
+ for(elem=lc->payload_types;elem!=NULL;elem=elem->next){
+ PayloadType *it=(PayloadType*)elem->data;
+ if (payload_type_get_number(it)==i){
+ already_assigned=TRUE;
+ break;
+ }
+ }
+ if (!already_assigned){
+ number=i;
+ lc->dyn_pt=i+1;
+ break;
+ }
+ }
+ if (number==-1){
+ ms_fatal("FIXME: too many codecs, no more free numbers.");
+ }
+ }
+ ms_message("assigning %s/%i payload type number %i",pt->mime_type,pt->clock_rate,number);
payload_type_set_number(pt,number);
if (recv_fmtp!=NULL) payload_type_set_recv_fmtp(pt,recv_fmtp);
rtp_profile_set_payload(&av_profile,number,pt);
- linphone_payload_types=ms_list_append(linphone_payload_types,pt);
+ lc->payload_types=ms_list_append(lc->payload_types,pt);
}
- static void linphone_core_free_payload_types(void){
- ms_list_for_each(linphone_payload_types,(void (*)(void*))payload_type_destroy);
- ms_list_free(linphone_payload_types);
- linphone_payload_types=NULL;
+ static void linphone_core_free_payload_types(LinphoneCore *lc){
+ ms_list_for_each(lc->payload_types,(void (*)(void*))payload_type_destroy);
+ ms_list_free(lc->payload_types);
+ lc->payload_types=NULL;
}
void linphone_core_set_state(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message){
linphone_core_set_state(lc,LinphoneGlobalStartup,"Starting up");
ortp_init();
- linphone_core_assign_payload_type(&payload_type_pcmu8000,0,NULL);
- linphone_core_assign_payload_type(&payload_type_gsm,3,NULL);
- linphone_core_assign_payload_type(&payload_type_pcma8000,8,NULL);
- linphone_core_assign_payload_type(&payload_type_g722,9,NULL);
- linphone_core_assign_payload_type(&payload_type_lpc1015,115,NULL);
- linphone_core_assign_payload_type(&payload_type_speex_nb,110,"vbr=on");
- linphone_core_assign_payload_type(&payload_type_speex_wb,111,"vbr=on");
- linphone_core_assign_payload_type(&payload_type_speex_uwb,112,"vbr=on");
- linphone_core_assign_payload_type(&payload_type_telephone_event,101,"0-11");
- linphone_core_assign_payload_type(&payload_type_ilbc,113,"mode=30");
- linphone_core_assign_payload_type(&payload_type_amr,114,"octet-align=1");
+ lc->dyn_pt=96;
+ linphone_core_assign_payload_type(lc,&payload_type_pcmu8000,0,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_gsm,3,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_pcma8000,8,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_speex_nb,110,"vbr=on");
+ linphone_core_assign_payload_type(lc,&payload_type_speex_wb,111,"vbr=on");
+ linphone_core_assign_payload_type(lc,&payload_type_speex_uwb,112,"vbr=on");
+ linphone_core_assign_payload_type(lc,&payload_type_telephone_event,101,"0-11");
#if defined(ANDROID) || defined (__IPHONE_OS_VERSION_MIN_REQUIRED)
/*shorten the DNS lookup time and send more retransmissions on mobiles:
PayloadType *pt;
pt=payload_type_clone(&payload_type_gsm);
pt->clock_rate=11025;
- rtp_profile_set_payload(&av_profile,114,pt);
- linphone_payload_types=ms_list_append(linphone_payload_types,pt);
- pt=payload_type_clone(&payload_type_gsm);
+ linphone_core_assign_payload_type(lc,pt,-1,NULL);
pt->clock_rate=22050;
- rtp_profile_set_payload(&av_profile,115,pt);
- linphone_payload_types=ms_list_append(linphone_payload_types,pt);
+ linphone_core_assign_payload_type(lc,pt,-1,NULL);
+ payload_type_destroy(pt);
}
#endif
#ifdef VIDEO_ENABLED
- linphone_core_assign_payload_type(&payload_type_h263,34,NULL);
- linphone_core_assign_payload_type(&payload_type_theora,97,NULL);
- linphone_core_assign_payload_type(&payload_type_h263_1998,98,"CIF=1;QCIF=1");
- linphone_core_assign_payload_type(&payload_type_mp4v,99,"profile-level-id=3");
- linphone_core_assign_payload_type(&payload_type_x_snow,100,NULL);
- linphone_core_assign_payload_type(&payload_type_h264,102,"profile-level-id=428014");
- linphone_core_assign_payload_type(&payload_type_vp8,103,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_h263,34,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_theora,97,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_h263_1998,98,"CIF=1;QCIF=1");
+ linphone_core_assign_payload_type(lc,&payload_type_mp4v,99,"profile-level-id=3");
+ linphone_core_assign_payload_type(lc,&payload_type_h264,102,"profile-level-id=428014");
+ linphone_core_assign_payload_type(lc,&payload_type_vp8,103,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_x_snow,-1,NULL);
/* due to limited space in SDP, we have to disable this h264 line which is normally no more necessary */
- /* linphone_core_assign_payload_type(&payload_type_h264,103,"packetization-mode=1;profile-level-id=428014");*/
+ /* linphone_core_assign_payload_type(&payload_type_h264,-1,"packetization-mode=1;profile-level-id=428014");*/
#endif
+ /*add all payload type for which we don't care about the number */
+ linphone_core_assign_payload_type(lc,&payload_type_ilbc,-1,"mode=30");
+ linphone_core_assign_payload_type(lc,&payload_type_amr,-1,"octet-align=1");
+ linphone_core_assign_payload_type(lc,&payload_type_lpc1015,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_g726_16,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_g726_24,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_g726_32,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_g726_40,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_16,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_24,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_32,-1,NULL);
+ linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_40,-1,NULL);
+
ms_init();
/* create a mediastreamer2 event queue and set it as global */
/* This allows to run event's callback in linphone_core_iterate() */
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;
#ifdef VIDEO_ENABLED
if (call->videostream!=NULL){
video_stream_set_sent_video_size(call->videostream,linphone_core_get_preferred_video_size(lc));
+ if (call->camera_active)
+ call->videostream->cam=lc->video_conf.device; /*to take into account eventual cam changes*/
video_stream_update_video_params (call->videostream);
}
#endif
* If not set the core will create its own window.
**/
void linphone_core_set_native_preview_window_id(LinphoneCore *lc, unsigned long id){
+#ifdef VIDEO_ENABLED
lc->preview_window_id=id;
+ LinphoneCall *call=linphone_core_get_current_call(lc);
+ if (call!=NULL && call->videostream){
+ video_stream_set_native_preview_window_id(call->videostream,id);
+ }
+#endif
}
/**
ms_list_for_each(lc->call_logs,(void (*)(void*))linphone_call_log_destroy);
lc->call_logs=ms_list_free(lc->call_logs);
- linphone_core_free_payload_types();
+ linphone_core_free_payload_types(lc);
ortp_exit();
linphone_core_set_state(lc,LinphoneGlobalOff,"Off");
}