From 20d21f4b5be4f54afca58c134426a6f7cb72ef56 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 23 Feb 2012 17:38:05 +0100 Subject: [PATCH] Bugfixing of dynamic video add/remove --- coreapi/linphonecall.c | 3 ++- coreapi/linphonecore.c | 3 +++ gtk/incall_view.c | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index a384a9299..2cd4a78cd 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -1218,7 +1218,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna video_preview_stop(lc->previewstream); lc->previewstream=NULL; } - call->current_params.has_video=FALSE; + if (vstream!=NULL && vstream->dir!=SalStreamInactive && vstream->port!=0) { const char *addr=vstream->addr[0]!='\0' ? vstream->addr : call->resultdesc->addr; call->video_profile=make_profile(call,call->resultdesc,vstream,&used_pt); @@ -1315,6 +1315,7 @@ void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_mut } #endif linphone_call_start_audio_stream(call,cname,all_inputs_muted,send_ringbacktone,use_arc); + call->current_params.has_video=FALSE; if (call->videostream!=NULL) { linphone_call_start_video_stream(call,cname,all_inputs_muted); } diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 8760f1a38..3a71dc5be 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2294,6 +2294,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho if (params!=NULL){ const char *subject; call->params=*params; + call->camera_active=call->params.has_video; update_local_media_description(lc,call); if (params->in_conference){ @@ -2370,6 +2371,7 @@ int linphone_core_accept_call_update(LinphoneCore *lc, LinphoneCall *call, const } if (params){ call->params=*params; + call->camera_active=call->params.has_video; update_local_media_description(lc,call); sal_call_set_local_media_description(call->op,call->localdesc); } @@ -2476,6 +2478,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, if (params){ call->params=*params; + call->camera_active=call->params.has_video; update_local_media_description(lc,call); sal_call_set_local_media_description(call->op,call->localdesc); } diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 6ac443e98..d693ac149 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -231,9 +231,11 @@ static void video_button_clicked(GtkWidget *button, LinphoneCall *call){ void linphone_gtk_update_video_button(LinphoneCall *call){ GtkWidget *call_view=(GtkWidget*)linphone_call_get_user_pointer(call); - GtkWidget *button=linphone_gtk_get_widget(call_view,"video_button"); + GtkWidget *button; const LinphoneCallParams *params=linphone_call_get_current_params(call); gboolean has_video=linphone_call_params_video_enabled(params); + if (call_view==NULL) return; + button=linphone_gtk_get_widget(call_view,"video_button"); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock(has_video ? GTK_STOCK_REMOVE : GTK_STOCK_ADD,GTK_ICON_SIZE_BUTTON));