Merge branch 'master' of git.linphone.org:linphone into belle-sip

This commit is contained in:
Ghislain MARY 2013-04-09 18:13:30 +02:00
commit f0c7dbd115
10 changed files with 297 additions and 143 deletions

View file

@ -1880,9 +1880,13 @@ void linphone_call_delete_upnp_session(LinphoneCall *call){
}
#endif //BUILD_UPNP
static void linphone_call_log_fill_stats(LinphoneCallLog *log, AudioStream *st){
audio_stream_get_local_rtp_stats (st,&log->local_stats);
log->quality=audio_stream_get_average_quality_rating(st);
static void linphone_call_log_fill_stats(LinphoneCallLog *log, MediaStream *st){
float quality=media_stream_get_average_quality_rating(st);
if (quality>=0){
if (log->quality!=-1){
log->quality*=quality/5.0;
}else log->quality=quality;
}
}
void linphone_call_stop_audio_stream(LinphoneCall *call) {
@ -1900,7 +1904,8 @@ void linphone_call_stop_audio_stream(LinphoneCall *call) {
lp_config_set_string(call->core->config,"sound","ec_state",state_str);
}
}
linphone_call_log_fill_stats (call->log,call->audiostream);
audio_stream_get_local_rtp_stats(call->audiostream,&call->log->local_stats);
linphone_call_log_fill_stats (call->log,(MediaStream*)call->audiostream);
if (call->endpoint){
linphone_call_remove_from_conf(call);
}
@ -1916,6 +1921,7 @@ void linphone_call_stop_video_stream(LinphoneCall *call) {
ortp_ev_queue_flush(call->videostream_app_evq);
ortp_ev_queue_destroy(call->videostream_app_evq);
call->videostream_app_evq=NULL;
linphone_call_log_fill_stats(call->log,(MediaStream*)call->videostream);
video_stream_stop(call->videostream);
call->videostream=NULL;
}
@ -2034,10 +2040,20 @@ float linphone_call_get_record_volume(LinphoneCall *call){
* active audio stream exist. Otherwise it returns the quality rating.
**/
float linphone_call_get_current_quality(LinphoneCall *call){
float audio_rating=-1;
float video_rating=-1;
float result;
if (call->audiostream){
return audio_stream_get_quality_rating(call->audiostream);
audio_rating=media_stream_get_quality_rating((MediaStream*)call->audiostream)/5.0;
}
return -1;
if (call->videostream){
video_rating=media_stream_get_quality_rating((MediaStream*)call->videostream)/5.0;
}
if (audio_rating<0 && video_rating<0) result=-1;
else if (audio_rating<0) result=video_rating*5.0;
else if (video_rating<0) result=audio_rating*5.0;
else result=audio_rating*video_rating*5.0;
return result;
}
/**
@ -2052,18 +2068,34 @@ float linphone_call_get_average_quality(LinphoneCall *call){
return -1;
}
static void update_local_stats(LinphoneCallStats *stats, MediaStream *stream){
const MSQualityIndicator *qi=media_stream_get_quality_indicator(stream);
if (qi) {
stats->local_late_rate=ms_quality_indicator_get_local_late_rate(qi);
stats->local_loss_rate=ms_quality_indicator_get_local_loss_rate(qi);
}
}
/**
* Access last known statistics for audio stream, for a given call.
**/
const LinphoneCallStats *linphone_call_get_audio_stats(const LinphoneCall *call) {
return &call->stats[LINPHONE_CALL_STATS_AUDIO];
const LinphoneCallStats *linphone_call_get_audio_stats(LinphoneCall *call) {
LinphoneCallStats *stats=&call->stats[LINPHONE_CALL_STATS_AUDIO];
if (call->audiostream){
update_local_stats(stats,(MediaStream*)call->audiostream);
}
return stats;
}
/**
* Access last known statistics for video stream, for a given call.
**/
const LinphoneCallStats *linphone_call_get_video_stats(const LinphoneCall *call) {
return &call->stats[LINPHONE_CALL_STATS_VIDEO];
const LinphoneCallStats *linphone_call_get_video_stats(LinphoneCall *call) {
LinphoneCallStats *stats=&call->stats[LINPHONE_CALL_STATS_VIDEO];
if (call->videostream){
update_local_stats(stats,(MediaStream*)call->videostream);
}
return stats;
}
/**
@ -2267,6 +2299,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse
freemsg(call->stats[LINPHONE_CALL_STATS_VIDEO].received_rtcp);
call->stats[LINPHONE_CALL_STATS_VIDEO].received_rtcp = evd->packet;
evd->packet = NULL;
update_local_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO],(MediaStream*)call->videostream);
if (lc->vtable.call_stats_updated)
lc->vtable.call_stats_updated(lc, call, &call->stats[LINPHONE_CALL_STATS_VIDEO]);
} else if (evt == ORTP_EVENT_RTCP_PACKET_EMITTED) {
@ -2275,6 +2308,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse
freemsg(call->stats[LINPHONE_CALL_STATS_VIDEO].sent_rtcp);
call->stats[LINPHONE_CALL_STATS_VIDEO].sent_rtcp = evd->packet;
evd->packet = NULL;
update_local_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO],(MediaStream*)call->videostream);
if (lc->vtable.call_stats_updated)
lc->vtable.call_stats_updated(lc, call, &call->stats[LINPHONE_CALL_STATS_VIDEO]);
} else if ((evt == ORTP_EVENT_ICE_SESSION_PROCESSING_FINISHED) || (evt == ORTP_EVENT_ICE_GATHERING_FINISHED)
@ -2308,6 +2342,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse
freemsg(call->stats[LINPHONE_CALL_STATS_AUDIO].received_rtcp);
call->stats[LINPHONE_CALL_STATS_AUDIO].received_rtcp = evd->packet;
evd->packet = NULL;
update_local_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO],(MediaStream*)call->audiostream);
if (lc->vtable.call_stats_updated)
lc->vtable.call_stats_updated(lc, call, &call->stats[LINPHONE_CALL_STATS_AUDIO]);
} else if (evt == ORTP_EVENT_RTCP_PACKET_EMITTED) {
@ -2316,6 +2351,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse
freemsg(call->stats[LINPHONE_CALL_STATS_AUDIO].sent_rtcp);
call->stats[LINPHONE_CALL_STATS_AUDIO].sent_rtcp = evd->packet;
evd->packet = NULL;
update_local_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO],(MediaStream*)call->audiostream);
if (lc->vtable.call_stats_updated)
lc->vtable.call_stats_updated(lc, call, &call->stats[LINPHONE_CALL_STATS_AUDIO]);
} else if ((evt == ORTP_EVENT_ICE_SESSION_PROCESSING_FINISHED) || (evt == ORTP_EVENT_ICE_GATHERING_FINISHED)

View file

@ -122,6 +122,7 @@ LinphoneCallLog * linphone_call_log_new(LinphoneCall *call, LinphoneAddress *fro
cl->from=from;
cl->to=to;
cl->status=LinphoneCallAborted; /*default status*/
cl->quality=-1;
return cl;
}
@ -412,10 +413,29 @@ const LinphoneAddress *linphone_core_get_current_call_remote_address(struct _Lin
return linphone_call_get_remote_address(call);
}
void linphone_core_set_log_handler(OrtpLogFunc logfunc) {
ortp_set_log_handler(logfunc);
}
void linphone_core_set_log_file(FILE *file) {
if (file == NULL) file = stdout;
ortp_set_log_file(file);
}
void linphone_core_set_log_level(OrtpLogLevel loglevel) {
ortp_set_log_level_mask(loglevel);
if (loglevel == 0) {
sal_disable_logs();
} else {
sal_enable_logs();
}
}
/**
* Enable logs in supplied FILE*.
*
* @ingroup misc
* @deprecated Use #linphone_core_set_log_file and #linphone_core_set_log_level instead.
*
* @param file a C FILE* where to fprintf logs. If null stdout is used.
*
@ -431,6 +451,7 @@ void linphone_core_enable_logs(FILE *file){
* Enable logs through the user's supplied log callback.
*
* @ingroup misc
* @deprecated Use #linphone_core_set_log_handler and #linphone_core_set_log_level instead.
*
* @param logfunc The address of a OrtpLogFunc callback whose protoype is
* typedef void (*OrtpLogFunc)(OrtpLogLevel lev, const char *fmt, va_list args);
@ -446,6 +467,7 @@ void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc){
* Entirely disable logging.
*
* @ingroup misc
* @deprecated Use #linphone_core_set_log_level instead.
**/
void linphone_core_disable_logs(){
ortp_set_log_level_mask(ORTP_ERROR|ORTP_FATAL);
@ -472,7 +494,7 @@ static void net_config_read (LinphoneCore *lc)
linphone_core_set_firewall_policy(lc,tmp);
tmp=lp_config_get_int(lc->config,"net","nat_sdp_only",0);
lc->net_conf.nat_sdp_only=tmp;
tmp=lp_config_get_int(lc->config,"net","mtu",0);
tmp=lp_config_get_int(lc->config,"net","mtu",1300);
linphone_core_set_mtu(lc,tmp);
tmp=lp_config_get_int(lc->config,"net","download_ptime",0);
linphone_core_set_download_ptime(lc,tmp);
@ -1204,6 +1226,7 @@ static void misc_config_read (LinphoneCore *lc) {
LpConfig *config=lc->config;
lc->max_call_logs=lp_config_get_int(config,"misc","history_max_size",15);
lc->max_calls=lp_config_get_int(config,"misc","max_calls",NB_MAX_CALLS);
linphone_core_set_log_level((OrtpLogLevel)lp_config_get_int(config,"misc","log_level",0));
}
@ -2164,9 +2187,13 @@ void linphone_core_iterate(LinphoneCore *lc){
lc->initial_subscribes_sent=TRUE;
}
if (one_second_elapsed && lp_config_needs_commit(lc->config)){
lp_config_sync(lc->config);
}
if (one_second_elapsed) {
if (ortp_get_log_level_mask() != lp_config_get_int(lc->config, "misc", "log_level", 0)) {
lp_config_set_int(lc->config, "misc", "log_level", ortp_get_log_level_mask());
}
if (lp_config_needs_commit(lc->config)) {
lp_config_sync(lc->config);
}
}
/**

View file

@ -347,14 +347,16 @@ struct _LinphoneCallStats {
LinphoneUpnpState upnp_state; /**< State of uPnP processing. */
float download_bandwidth; /**<Download bandwidth measurement of received stream, expressed in kbit/s, including IP/UDP/RTP headers*/
float upload_bandwidth; /**<Download bandwidth measurement of sent stream, expressed in kbit/s, including IP/UDP/RTP headers*/
float local_late_rate; /**<percentage of packet received too late over last second*/
float local_loss_rate; /**<percentage of lost packet over last second*/
};
/**
* @}
**/
const LinphoneCallStats *linphone_call_get_audio_stats(const LinphoneCall *call);
const LinphoneCallStats *linphone_call_get_video_stats(const LinphoneCall *call);
const LinphoneCallStats *linphone_call_get_audio_stats(LinphoneCall *call);
const LinphoneCallStats *linphone_call_get_video_stats(LinphoneCall *call);
/** Callback prototype */
@ -883,8 +885,37 @@ typedef void * (*LinphoneWaitingCallback)(struct _LinphoneCore *lc, void *contex
/* THE main API */
LINPHONE_PUBLIC void linphone_core_enable_logs(FILE *file);
LINPHONE_PUBLIC void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc);
/**
* Define a log handler.
*
* @ingroup misc
*
* @param logfunc The function pointer of the log handler.
*/
void linphone_core_set_log_handler(OrtpLogFunc logfunc);
/**
* Define a log file.
*
* @ingroup misc
*
* If the file pointer passed as an argument is NULL, stdout is used instead.
*
* @param file A pointer to the FILE structure of the file to write to.
*/
void linphone_core_set_log_file(FILE *file);
/**
* Define the log level.
*
* @ingroup misc
*
* The loglevel parameter is a bitmask parameter. Therefore to enable only warning and error
* messages, use ORTP_WARNING | ORTP_ERROR. To disable logs, simply set loglevel to 0.
*
* @param loglevel A bitmask of the log levels to set.
*/
void linphone_core_set_log_level(OrtpLogLevel loglevel);
LINPHONE_PUBLIC void linphone_core_enable_logs(FILE *file);
LINPHONE_PUBLIC void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc);
void linphone_core_disable_logs(void);
const char *linphone_core_get_version(void);
const char *linphone_core_get_user_agent_name(void);

View file

@ -1578,6 +1578,23 @@ extern "C" jfloat Java_org_linphone_core_LinphoneCallStatsImpl_getJitterBufferSi
return (jfloat)((LinphoneCallStats *)stats_ptr)->jitter_stats.jitter_buffer_size_ms;
}
extern "C" jfloat Java_org_linphone_core_LinphoneCallStatsImpl_getLocalLossRate(JNIEnv *env, jobject thiz,jlong stats_ptr) {
const LinphoneCallStats *stats = (LinphoneCallStats *)stats_ptr;
return stats->local_loss_rate;
}
extern "C" jfloat Java_org_linphone_core_LinphoneCallStatsImpl_getLocalLateRate(JNIEnv *env, jobject thiz, jlong stats_ptr) {
const LinphoneCallStats *stats = (LinphoneCallStats *)stats_ptr;
return stats->local_late_rate;
}
extern "C" void Java_org_linphone_core_LinphoneCallStatsImpl_updateStats(JNIEnv *env, jobject thiz, jlong call_ptr, jint mediatype) {
if (mediatype==LINPHONE_CALL_STATS_AUDIO)
linphone_call_get_audio_stats((LinphoneCall*)call_ptr);
else
linphone_call_get_video_stats((LinphoneCall*)call_ptr);
}
/*payloadType*/
extern "C" jstring Java_org_linphone_core_PayloadTypeImpl_toString(JNIEnv* env,jobject thiz,jlong ptr) {
PayloadType* pt = (PayloadType*)ptr;
@ -1702,7 +1719,6 @@ extern "C" jfloat Java_org_linphone_core_LinphoneCallImpl_getAverageQuality( JNI
return (jfloat)linphone_call_get_average_quality((LinphoneCall*)ptr);
}
//LinphoneFriend
extern "C" jlong Java_org_linphone_core_LinphoneFriendImpl_newLinphoneFriend(JNIEnv* env
,jobject thiz

View file

@ -121,25 +121,25 @@ public interface LinphoneCallStats {
public float getUploadBandwidth();
/**
* Get the sender loss rate since last report
* Get the local loss rate since last report
* @return The sender loss rate
*/
public float getSenderLossRate();
/**
* Get the receiver loss rate since last report
* Get the remote reported loss rate since last report
* @return The receiver loss rate
*/
public float getReceiverLossRate();
/**
* Get the sender interarrival jitter
* Get the local interarrival jitter
* @return The interarrival jitter at last emitted sender report
*/
public float getSenderInterarrivalJitter();
/**
* Get the receiver interarrival jitter
* Get the remote reported interarrival jitter
* @return The interarrival jitter at last received receiver report
*/
public float getReceiverInterarrivalJitter();
@ -161,4 +161,16 @@ public interface LinphoneCallStats {
* @return The jitter buffer size in milliseconds
*/
public float getJitterBufferSize();
/**
* Get the local loss rate. Unlike getSenderLossRate() that returns this loss rate "since last emitted RTCP report", the value returned here is updated every second.
* @return The local loss rate percentage.
**/
public float getLocalLossRate();
/**
* Get the local late packets rate. The value returned here is updated every second.
* @return The local late rate percentage.
**/
public float getLocalLateRate();
}

View file

@ -68,9 +68,11 @@ class LinphoneCallImpl implements LinphoneCall {
videoStats = stats;
}
public LinphoneCallStats getAudioStats() {
if (audioStats!=null) ((LinphoneCallStatsImpl)audioStats).updateRealTimeStats(this);
return audioStats;
}
public LinphoneCallStats getVideoStats() {
if (videoStats!=null) ((LinphoneCallStatsImpl)videoStats).updateRealTimeStats(this);
return videoStats;
}
public CallDirection getDirection() {

View file

@ -31,6 +31,9 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
private float roundTripDelay;
private long latePacketsCumulativeNumber;
private float jitterBufferSize;
private float localLossRate;
private float localLateRate;
private long nativePtr;
private native int getMediaType(long nativeStatsPtr);
private native int getIceState(long nativeStatsPtr);
@ -43,8 +46,12 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
private native float getRoundTripDelay(long nativeStatsPtr);
private native long getLatePacketsCumulativeNumber(long nativeStatsPtr, long nativeCallPtr);
private native float getJitterBufferSize(long nativeStatsPtr);
private native float getLocalLossRate(long nativeStatsPtr);
private native float getLocalLateRate(long nativeStatsPtr);
private native void updateStats(long nativeCallPtr, int mediaType);
protected LinphoneCallStatsImpl(long nativeCallPtr, long nativeStatsPtr) {
nativePtr=nativeStatsPtr;
mediaType = getMediaType(nativeStatsPtr);
iceState = getIceState(nativeStatsPtr);
downloadBandwidth = getDownloadBandwidth(nativeStatsPtr);
@ -56,6 +63,13 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
roundTripDelay = getRoundTripDelay(nativeStatsPtr);
latePacketsCumulativeNumber = getLatePacketsCumulativeNumber(nativeStatsPtr, nativeCallPtr);
jitterBufferSize = getJitterBufferSize(nativeStatsPtr);
}
protected void updateRealTimeStats(LinphoneCall call){
updateStats( ((LinphoneCallImpl)call).nativePtr, mediaType);
localLossRate=getLocalLossRate(nativePtr);
localLateRate=getLocalLateRate(nativePtr);
}
public MediaType getMediaType() {
@ -101,4 +115,12 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
public float getJitterBufferSize() {
return jitterBufferSize;
}
public float getLocalLossRate(){
return localLossRate;
}
public float getLocalLateRate(){
return localLateRate;
}
}

@ -1 +1 @@
Subproject commit d9ce543dee40d7cb7da55e50c6716a25f53ea2ba
Subproject commit 4f93003c1eade1442fdedd8dee10f18c98ec47c3

2
oRTP

@ -1 +1 @@
Subproject commit 35f5efbfbf7814bd0403249431a6b94d6c4286b4
Subproject commit 9f51aa254fc5c24834614612036485406a8d06a7

244
po/fr.po
View file

@ -7,20 +7,22 @@ msgstr ""
"Project-Id-Version: Linphone 0.9.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-04-08 16:59+0200\n"
"PO-Revision-Date: 2013-04-08 16:46+0100\n"
"Last-Translator: Simon Morlat <simon.morlat@linphone.org>\n"
"PO-Revision-Date: 2013-04-09 13:57+0100\n"
"Last-Translator: Simon Morlat <simon.morlat@linphone.org> \n"
"Language-Team: french <fr@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../gtk/calllogs.c:139 ../gtk/friendlist.c:922
#: ../gtk/calllogs.c:139
#: ../gtk/friendlist.c:922
#, c-format
msgid "Call %s"
msgstr "Appeler %s"
#: ../gtk/calllogs.c:140 ../gtk/friendlist.c:923
#: ../gtk/calllogs.c:140
#: ../gtk/friendlist.c:923
#, c-format
msgid "Send text to %s"
msgstr "Chatter avec %s"
@ -60,7 +62,8 @@ msgid_plural "%i seconds"
msgstr[0] ""
msgstr[1] ""
#: ../gtk/calllogs.c:321 ../gtk/calllogs.c:327
#: ../gtk/calllogs.c:321
#: ../gtk/calllogs.c:327
#, c-format
msgid "<big><b>%s</b></big>\t%s"
msgstr ""
@ -71,6 +74,8 @@ msgid ""
"<small><i>%s</i>\t<i>Quality: %s</i></small>\n"
"%s\t%s\t"
msgstr ""
"<small><i>%s</i>\t<i>Qualité: %s</i></small>\n"
"%s\t%s\t"
#: ../gtk/calllogs.c:329
#, c-format
@ -79,7 +84,8 @@ msgid ""
"%s"
msgstr ""
#: ../gtk/conference.c:38 ../gtk/main.ui.h:13
#: ../gtk/conference.c:38
#: ../gtk/main.ui.h:13
msgid "Conference"
msgstr "Conférence"
@ -87,12 +93,15 @@ msgstr "Conférence"
msgid "Me"
msgstr "Moi"
#: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102
#: ../gtk/support.c:49
#: ../gtk/support.c:73
#: ../gtk/support.c:102
#, c-format
msgid "Couldn't find pixmap file: %s"
msgstr "Icone non trouvée: %s"
#: ../gtk/chat.c:324 ../gtk/friendlist.c:872
#: ../gtk/chat.c:324
#: ../gtk/friendlist.c:872
msgid "Invalid sip contact !"
msgstr "Contact sip invalide !"
@ -102,7 +111,7 @@ msgstr "affiche des informations de debogage"
#: ../gtk/main.c:99
msgid "path to a file to write logs into."
msgstr ""
msgstr "chemin vers le fichier de logs."
#: ../gtk/main.c:106
msgid "Start linphone with video disabled."
@ -114,19 +123,15 @@ msgstr "Démarre iconifié, sans interface principale."
#: ../gtk/main.c:120
msgid "address to call right now"
msgstr "addresse à appeler maintenant"
msgstr "adresse à appeler maintenant"
#: ../gtk/main.c:127
msgid "if set automatically answer incoming calls"
msgstr "si positionné, répond automatiquement aux appels entrants"
#: ../gtk/main.c:134
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
"Spécifie un répertoire de travail (qui devrait être le répertoire "
"d'installation, par exemple c:\\Program Files\\Linphone)"
msgid "Specifiy a working directory (should be the base of the installation, eg: c:\\Program Files\\Linphone)"
msgstr "Spécifie un répertoire de travail (qui devrait être le répertoire d'installation, par exemple c:\\Program Files\\Linphone)"
#: ../gtk/main.c:515
#, c-format
@ -137,15 +142,12 @@ msgstr "Appel avec %s"
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
"Would you allow him to see your presence status or add him to your contact "
"list ?\n"
"Would you allow him to see your presence status or add him to your contact list ?\n"
"If you answer no, this person will be temporarily blacklisted."
msgstr ""
"%s souhaite vous ajouter à sa liste de contact.\n"
"Souhaitez vous l'autoriser à voir votre information de présence et l'ajouter "
"à votre liste également ?\n"
"Si vous répondez non, cette personne sera mise temporairement sur liste "
"noire."
"Souhaitez vous l'autoriser à voir votre information de présence et l'ajouter à votre liste également ?\n"
"Si vous répondez non, cette personne sera mise temporairement sur liste noire."
#: ../gtk/main.c:1023
#, c-format
@ -160,19 +162,24 @@ msgstr ""
msgid "Call error"
msgstr "Erreur lors de l'appel"
#: ../gtk/main.c:1129 ../coreapi/linphonecore.c:3189
#: ../gtk/main.c:1129
#: ../coreapi/linphonecore.c:3189
msgid "Call ended"
msgstr "Appel terminé."
#: ../gtk/main.c:1132 ../coreapi/linphonecore.c:239
#: ../gtk/main.c:1132
#: ../coreapi/linphonecore.c:239
msgid "Incoming call"
msgstr "Appel entrant"
#: ../gtk/main.c:1134 ../gtk/incall_view.c:497 ../gtk/main.ui.h:5
#: ../gtk/main.c:1134
#: ../gtk/incall_view.c:497
#: ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Répondre"
#: ../gtk/main.c:1136 ../gtk/main.ui.h:6
#: ../gtk/main.c:1136
#: ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Refuser"
@ -183,12 +190,12 @@ msgstr "Appel en pause"
#: ../gtk/main.c:1142
#, c-format
msgid "<b>by %s</b>"
msgstr ""
msgstr "b>par %s</b>"
#: ../gtk/main.c:1191
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
msgstr "%s propose de démarrer la vidéo. Acceptez-vous ?"
#: ../gtk/main.c:1353
msgid "Website link"
@ -203,7 +210,8 @@ msgstr "Linphone - un téléphone video pour l'internet"
msgid "%s (Default)"
msgstr "%s (par défaut)"
#: ../gtk/main.c:1796 ../coreapi/callbacks.c:810
#: ../gtk/main.c:1796
#: ../coreapi/callbacks.c:810
#, c-format
msgid "We are transferred to %s"
msgstr "Transfert vers %s"
@ -228,7 +236,9 @@ msgstr "Ajouter au carnet d'adresse"
msgid "Presence status"
msgstr "Info de présence"
#: ../gtk/friendlist.c:661 ../gtk/propertybox.c:367 ../gtk/contact.ui.h:1
#: ../gtk/friendlist.c:661
#: ../gtk/propertybox.c:367
#: ../gtk/contact.ui.h:1
msgid "Name"
msgstr "Nom"
@ -281,11 +291,13 @@ msgstr "Débit min. (kbit/s)"
msgid "Parameters"
msgstr "Paramètres"
#: ../gtk/propertybox.c:435 ../gtk/propertybox.c:578
#: ../gtk/propertybox.c:435
#: ../gtk/propertybox.c:578
msgid "Enabled"
msgstr "Activé"
#: ../gtk/propertybox.c:437 ../gtk/propertybox.c:578
#: ../gtk/propertybox.c:437
#: ../gtk/propertybox.c:578
msgid "Disabled"
msgstr "Désactivé"
@ -366,11 +378,8 @@ msgid "Serbian"
msgstr "Serbe"
#: ../gtk/propertybox.c:848
msgid ""
"You need to restart linphone for the new language selection to take effect."
msgstr ""
"La nouvelle selection de langue prendra effet au prochain démarrage de "
"linphone."
msgid "You need to restart linphone for the new language selection to take effect."
msgstr "La nouvelle selection de langue prendra effet au prochain démarrage de linphone."
#: ../gtk/propertybox.c:934
msgid "None"
@ -390,10 +399,12 @@ msgid ""
"A more recent version is availalble from %s.\n"
"Would you like to open a browser to download it ?"
msgstr ""
"Une version plus récente est disponible sur %s.\n"
"Voulez vous ouvrir le navigateur afin de pouvoir télécharger la dernière version ?"
#: ../gtk/update.c:91
msgid "You are running the lastest version."
msgstr ""
msgstr "Vous utilisez la dernière version."
#: ../gtk/buddylookup.c:85
msgid "Firstname, Lastname"
@ -450,13 +461,14 @@ msgstr "Entrez votre identifiant linphone.org"
msgid "Username:"
msgstr "Nom d'utilisateur:"
#: ../gtk/setupwizard.c:94 ../gtk/password.ui.h:4
#: ../gtk/setupwizard.c:94
#: ../gtk/password.ui.h:4
msgid "Password:"
msgstr "Mot de passe:"
#: ../gtk/setupwizard.c:114
msgid "Enter your account informations"
msgstr ""
msgstr "Entrez les informations concernant votre compte"
#: ../gtk/setupwizard.c:121
msgid "Username*"
@ -499,41 +511,44 @@ msgid ""
"Error, account not validated, username already used or server unreachable.\n"
"Please go back and try again."
msgstr ""
"Erreur, le compte n'est pas validé, l'identifiant est déjà utilisé ou le serveur n'est pas accessible.\n"
"Merci d'essayer à nouveau."
#: ../gtk/setupwizard.c:380
msgid "Thank you. Your account is now configured and ready for use."
msgstr ""
msgstr "Merci. Votre compte est maintenant configuré et prêt à être utilisé."
#: ../gtk/setupwizard.c:388
msgid ""
"Please validate your account by clicking on the link we just sent you by "
"email.\n"
"Please validate your account by clicking on the link we just sent you by email.\n"
"Then come back here and press Next button."
msgstr ""
"Merci de valider votre compte en cliquant sur le lien que nous avons envoyé par email.\n"
"Puis appuyez sur suivant."
#: ../gtk/setupwizard.c:564
msgid "Welcome to the account setup assistant"
msgstr ""
msgstr "Bienvenue dans l'assistant de configuration de compte."
#: ../gtk/setupwizard.c:569
msgid "Account setup assistant"
msgstr ""
msgstr "Assistant de configuration de compte."
#: ../gtk/setupwizard.c:575
msgid "Configure your account (step 1/1)"
msgstr "Configurez votre compte"
msgstr "Configurez votre compte (étape 1/1)"
#: ../gtk/setupwizard.c:580
msgid "Enter your sip username (step 1/1)"
msgstr ""
msgstr "Entrez votre identifiant sip (étape 1/1)"
#: ../gtk/setupwizard.c:584
msgid "Enter account information (step 1/2)"
msgstr ""
msgstr "Entrez les informations concernant votre compte (étape 1/2)"
#: ../gtk/setupwizard.c:593
msgid "Validation (step 2/2)"
msgstr ""
msgstr "Validation (étape 2/2)"
#: ../gtk/setupwizard.c:598
msgid "Error"
@ -541,9 +556,10 @@ msgstr "Erreur"
#: ../gtk/setupwizard.c:602
msgid "Terminating"
msgstr ""
msgstr "En cours darrêt."
#: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94
#: ../gtk/incall_view.c:70
#: ../gtk/incall_view.c:94
#, c-format
msgid "Call #%i"
msgstr "Appel #%i"
@ -553,14 +569,15 @@ msgstr "Appel #%i"
msgid "Transfer to call #%i with %s"
msgstr "Transférer vers l'appel #%i avec %s"
#: ../gtk/incall_view.c:210 ../gtk/incall_view.c:213
#: ../gtk/incall_view.c:210
#: ../gtk/incall_view.c:213
#, fuzzy
msgid "Not used"
msgstr "Non trouvé"
#: ../gtk/incall_view.c:220
msgid "ICE not activated"
msgstr ""
msgstr "ICE non activé"
#: ../gtk/incall_view.c:222
#, fuzzy
@ -569,11 +586,11 @@ msgstr "L'appel a échoué."
#: ../gtk/incall_view.c:224
msgid "ICE in progress"
msgstr ""
msgstr "Négociation ICE en cours"
#: ../gtk/incall_view.c:226
msgid "Going through one or more NATs"
msgstr ""
msgstr "Via un ou plusieurs NATs"
#: ../gtk/incall_view.c:228
#, fuzzy
@ -582,36 +599,35 @@ msgstr "Redirection"
#: ../gtk/incall_view.c:230
msgid "Through a relay server"
msgstr ""
msgstr "Via un serveur relais"
#: ../gtk/incall_view.c:238
msgid "uPnP not activated"
msgstr "uPnP non activé"
#: ../gtk/incall_view.c:240
#, fuzzy
msgid "uPnP in progress"
msgstr "Découverte STUN en cours"
msgstr "uPnP en cours"
#: ../gtk/incall_view.c:242
#, fuzzy
msgid "uPnp not available"
msgstr "indisponible"
msgstr "uPnP est indisponible"
#: ../gtk/incall_view.c:244
msgid "uPnP is running"
msgstr ""
msgstr "uPnP en cours dexécution"
#: ../gtk/incall_view.c:246
#, fuzzy
msgid "uPnP failed"
msgstr "L'appel a échoué."
msgstr "uPnP a échoué."
#: ../gtk/incall_view.c:256 ../gtk/incall_view.c:257
#: ../gtk/incall_view.c:256
#: ../gtk/incall_view.c:257
msgid "Direct or through server"
msgstr ""
msgstr "Directe ou via un serveur"
#: ../gtk/incall_view.c:259 ../gtk/incall_view.c:265
#: ../gtk/incall_view.c:259
#: ../gtk/incall_view.c:265
#, c-format
msgid ""
"download: %f\n"
@ -623,7 +639,8 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:384 ../gtk/main.ui.h:12
#: ../gtk/incall_view.c:384
#: ../gtk/main.ui.h:12
msgid "Hang up"
msgstr "Raccrocher"
@ -631,7 +648,8 @@ msgstr "Raccrocher"
msgid "<b>Calling...</b>"
msgstr "<b>Tentative d'appel...</b>"
#: ../gtk/incall_view.c:479 ../gtk/incall_view.c:689
#: ../gtk/incall_view.c:479
#: ../gtk/incall_view.c:689
msgid "00::00::00"
msgstr ""
@ -659,7 +677,8 @@ msgstr "très faible"
msgid "too bad"
msgstr "nulle"
#: ../gtk/incall_view.c:536 ../gtk/incall_view.c:552
#: ../gtk/incall_view.c:536
#: ../gtk/incall_view.c:552
msgid "unavailable"
msgstr "indisponible"
@ -676,7 +695,8 @@ msgstr "Sécurisé par ZRTP- [jeton: %s]"
msgid "Set unverified"
msgstr "Marquer comme non vérifié"
#: ../gtk/incall_view.c:663 ../gtk/main.ui.h:4
#: ../gtk/incall_view.c:663
#: ../gtk/main.ui.h:4
msgid "Set verified"
msgstr "Marquer comme vérifié"
@ -717,7 +737,8 @@ msgstr "Transfert échoué"
msgid "Resume"
msgstr "Reprendre"
#: ../gtk/incall_view.c:835 ../gtk/main.ui.h:9
#: ../gtk/incall_view.c:835
#: ../gtk/main.ui.h:9
msgid "Pause"
msgstr "Pause"
@ -752,7 +773,7 @@ msgstr "Fin de conférence"
#: ../gtk/main.ui.h:7
msgid "Record this call to an audio file"
msgstr ""
msgstr "Enregistrement de l'appel dans un fichier audio."
#: ../gtk/main.ui.h:8
msgid "Video"
@ -760,7 +781,7 @@ msgstr "Vidéo"
#: ../gtk/main.ui.h:10
msgid "Mute"
msgstr ""
msgstr "Couper le son"
#: ../gtk/main.ui.h:11
msgid "Transfer"
@ -808,7 +829,7 @@ msgstr ""
#: ../gtk/main.ui.h:24
msgid "Account assistant"
msgstr ""
msgstr "Assistant de compte"
#: ../gtk/main.ui.h:25
msgid "SIP address or phone number:"
@ -822,11 +843,13 @@ msgstr "Démarrer un nouvel appel"
msgid "Contacts"
msgstr "Contacts"
#: ../gtk/main.ui.h:28 ../gtk/parameters.ui.h:50
#: ../gtk/main.ui.h:28
#: ../gtk/parameters.ui.h:50
msgid "Add"
msgstr "Ajouter"
#: ../gtk/main.ui.h:29 ../gtk/parameters.ui.h:51
#: ../gtk/main.ui.h:29
#: ../gtk/parameters.ui.h:51
msgid "Edit"
msgstr "Editer"
@ -850,17 +873,19 @@ msgstr "Appels récents"
msgid "My current identity:"
msgstr "Mon identité sip:"
#: ../gtk/main.ui.h:35 ../gtk/tunnel_config.ui.h:7
#: ../gtk/main.ui.h:35
#: ../gtk/tunnel_config.ui.h:7
msgid "Username"
msgstr "Nom d'utilisateur"
#: ../gtk/main.ui.h:36 ../gtk/tunnel_config.ui.h:8
#: ../gtk/main.ui.h:36
#: ../gtk/tunnel_config.ui.h:8
msgid "Password"
msgstr "Mot de passe"
#: ../gtk/main.ui.h:37
msgid "Internet connection:"
msgstr ""
msgstr "Connexion internet:"
#: ../gtk/main.ui.h:38
msgid "Automatically log me in"
@ -1041,7 +1066,8 @@ msgstr "Codecs audio"
msgid "Video codecs"
msgstr "Codecs vidéo"
#: ../gtk/parameters.ui.h:7 ../gtk/keypad.ui.h:5
#: ../gtk/parameters.ui.h:7
#: ../gtk/keypad.ui.h:5
msgid "C"
msgstr ""
@ -1091,7 +1117,7 @@ msgstr ""
#: ../gtk/parameters.ui.h:19
msgid "DSCP fields"
msgstr ""
msgstr "Champs DSCP"
#: ../gtk/parameters.ui.h:20
msgid "Fixed"
@ -1127,14 +1153,12 @@ msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Derrière un pare-feu (utiliser STUN)"
#: ../gtk/parameters.ui.h:28
#, fuzzy
msgid "Behind NAT / Firewall (use ICE)"
msgstr "Derrière un pare-feu (utiliser STUN)"
msgstr "Derrière un pare-feu (utiliser ICE)"
#: ../gtk/parameters.ui.h:29
#, fuzzy
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "Derrière un pare-feu (utiliser STUN)"
msgstr "Derrière un pare-feu (utiliser uPnP)"
#: ../gtk/parameters.ui.h:30
msgid "Stun server:"
@ -1194,9 +1218,7 @@ msgstr "Paramètres multimedia"
#: ../gtk/parameters.ui.h:44
msgid "This section defines your SIP address when not using a SIP account"
msgstr ""
"Cette rubrique permet de définir son adresse SIP lorsqu'on ne possède pas de "
"compte SIP"
msgstr "Cette rubrique permet de définir son adresse SIP lorsqu'on ne possède pas de compte SIP"
#: ../gtk/parameters.ui.h:45
msgid "Your display name (eg: John Doe):"
@ -1238,11 +1260,13 @@ msgstr "<b>Sécurité</b>"
msgid "Manage SIP Accounts"
msgstr "Gérer mes comptes SIP"
#: ../gtk/parameters.ui.h:57 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:57
#: ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Activer"
#: ../gtk/parameters.ui.h:58 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:58
#: ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Désactiver"
@ -1267,13 +1291,8 @@ msgid "Enable adaptive rate control"
msgstr "Activer le control de débit adaptatif."
#: ../gtk/parameters.ui.h:64
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
"<i>Le control de débit adaptatif est une technique pour adapter la qualité "
"de l'audio et de la video en fonction de la bande passante disponible, "
"durant l'appel.</i>"
msgid "<i>Adaptive rate control is a technique to dynamically guess the available bandwidth during a call.</i>"
msgstr "<i>Le control de débit adaptatif est une technique pour adapter la qualité de l'audio et de la video en fonction de la bande passante disponible, durant l'appel.</i>"
#: ../gtk/parameters.ui.h:65
msgid "<b>Bandwidth control</b>"
@ -1324,9 +1343,8 @@ msgid "Please wait"
msgstr "En attente"
#: ../gtk/dscp_settings.ui.h:1
#, fuzzy
msgid "Dscp settings"
msgstr "Réglages"
msgstr "Réglages Dscp"
#: ../gtk/dscp_settings.ui.h:2
msgid "SIP"
@ -1346,10 +1364,9 @@ msgstr ""
#: ../gtk/call_statistics.ui.h:1
msgid "Call statistics"
msgstr ""
msgstr "Statistiques de l'appel"
#: ../gtk/call_statistics.ui.h:2
#, fuzzy
msgid "Audio codec"
msgstr "Codecs audio"
@ -1380,9 +1397,8 @@ msgid "Round trip time"
msgstr ""
#: ../gtk/call_statistics.ui.h:9
#, fuzzy
msgid "<b>Call statistics and information</b>"
msgstr "<b>Information sur le contact</b>"
msgstr "<b>Statistiques de l'appel et informations</b>"
#: ../gtk/tunnel_config.ui.h:1
#, fuzzy
@ -1509,11 +1525,8 @@ msgid "Could not resolve this number."
msgstr "La destination n'a pu être trouvée."
#: ../coreapi/linphonecore.c:2231
msgid ""
"Could not parse given sip address. A sip url usually looks like sip:"
"user@domain"
msgstr ""
"Adresse SIP mal formulée. Une address sip ressemble à <sip:nom@domaine>"
msgid "Could not parse given sip address. A sip url usually looks like sip:user@domain"
msgstr "Adresse SIP mal formulée. Une address sip ressemble à <sip:nom@domaine>"
#: ../coreapi/linphonecore.c:2432
msgid "Contacting"
@ -1626,7 +1639,7 @@ msgstr "Parti"
#: ../coreapi/friend.c:57
msgid "Using another messaging service"
msgstr ""
msgstr "Utilisation d'un autre service de messagerie"
#: ../coreapi/friend.c:60
msgid "Offline"
@ -1641,12 +1654,8 @@ msgid "Unknown-bug"
msgstr "Bug inconnu"
#: ../coreapi/proxy.c:204
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr ""
"L'addresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" "
"suivie par un nom de domaine."
msgid "The sip proxy address you entered is invalid, it must start with \"sip:\" followed by a hostname."
msgstr "L'adresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" suivie par un nom de domaine."
#: ../coreapi/proxy.c:210
msgid ""
@ -1654,8 +1663,7 @@ msgid ""
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
msgstr ""
"L'identité SIP que vous avez fourni est invalide.\n"
"Elle doit être de la forme sip:username@domain, comme par example sip:"
"alice@example.net"
"Elle doit être de la forme sip:username@domain, comme par example sip:alice@example.net"
#: ../coreapi/proxy.c:1069
#, c-format
@ -1801,7 +1809,7 @@ msgstr[1] "Vous avez manqué %i appels"
#~ msgid "Enter username, phone number, or full sip address"
#~ msgstr ""
#~ "Entrez un nom d'utilisateur, un numéro de téléphone, ou une addresse SIP"
#~ "Entrez un nom d'utilisateur, un numéro de téléphone, ou une adresse SIP"
#~ msgid "Lookup:"
#~ msgstr "Rechercher:"