fix broken gtk conference interface.
}
}
+static int linphone_conference_get_size(LinphoneConference *conf){
+ if (conf->conf == NULL) {
+ return 0;
+ }
+ return ms_audio_conference_get_size(conf->conf) - (conf->record_endpoint ? 1 : 0);
+}
+
static int remote_participants_count(LinphoneConference *ctx) {
- if (!ctx->conf || ms_audio_conference_get_size(ctx->conf)==0) return 0;
- if (!ctx->local_participant) return ms_audio_conference_get_size(ctx->conf);
- return ms_audio_conference_get_size(ctx->conf) -1;
+ int count=linphone_conference_get_size(ctx);
+ if (count==0) return 0;
+ if (!ctx->local_participant) return count;
+ return count -1;
}
void linphone_core_conference_check_uninit(LinphoneCore *lc){
LinphoneConference *ctx=&lc->conf_ctx;
if (ctx->conf){
- ms_message("conference_check_uninit(): nmembers=%i",ms_audio_conference_get_size(ctx->conf));
- if (remote_participants_count(ctx)==1){
+ int remote_count=remote_participants_count(ctx);
+ ms_message("conference_check_uninit(): size=%i",linphone_conference_get_size(ctx));
+ if (remote_count==1){
convert_conference_to_call(lc);
}
- if (ms_audio_conference_get_size(ctx->conf)==1 && ctx->local_participant!=NULL){
- remove_local_endpoint(ctx);
+ if (remote_count==0){
+ if (ctx->local_participant!=NULL)
+ remove_local_endpoint(ctx);
+ if (ctx->record_endpoint){
+ ms_audio_conference_remove_member(ctx->conf,ctx->record_endpoint);
+ ms_audio_endpoint_destroy(ctx->record_endpoint);
+ ctx->record_endpoint=NULL;
+ }
}
+
if (ms_audio_conference_get_size(ctx->conf)==0){
ms_audio_conference_destroy(ctx->conf);
ctx->conf=NULL;
* @returns the number of participants to the conference
**/
int linphone_core_get_conference_size(LinphoneCore *lc) {
- if (lc->conf_ctx.conf == NULL) {
- return 0;
+ LinphoneConference *conf=&lc->conf_ctx;
+ return linphone_conference_get_size(conf);
+}
+
+
+int linphone_core_start_conference_recording(LinphoneCore *lc, const char *path){
+ LinphoneConference *conf=&lc->conf_ctx;
+ if (conf->conf == NULL) {
+ ms_warning("linphone_core_start_conference_recording(): no conference now.");
+ return -1;
+ }
+ if (conf->record_endpoint==NULL){
+ conf->record_endpoint=ms_audio_endpoint_new_recorder();
+ ms_audio_conference_add_member(conf->conf,conf->record_endpoint);
}
- return ms_audio_conference_get_size(lc->conf_ctx.conf);
+ ms_audio_recorder_endpoint_start(conf->record_endpoint,path);
+ return 0;
+}
+
+int linphone_core_stop_conference_recording(LinphoneCore *lc){
+ LinphoneConference *conf=&lc->conf_ctx;
+ if (conf->conf == NULL) {
+ ms_warning("linphone_core_stop_conference_recording(): no conference now.");
+ return -1;
+ }
+ if (conf->record_endpoint==NULL){
+ ms_warning("linphone_core_stop_conference_recording(): no record active.");
+ return -1;
+ }
+ ms_audio_recorder_endpoint_stop(conf->record_endpoint);
+ return 0;
}
/**
/*prevent a gcc bug with %c*/
static size_t my_strftime(char *s, size_t max, const char *fmt, const struct tm *tm){
-#if !defined(_WIN32_WCE)
return strftime(s, max, fmt, tm);
-#else
- return 0;
- /*FIXME*/
-#endif /*_WIN32_WCE*/
}
static void set_call_log_date(LinphoneCallLog *cl, time_t start_time){
set_call_log_date(cl,cl->start_date_time);
cl->from=from;
cl->to=to;
- cl->status=LinphoneCallAborted; /*default status*/
+ cl->status=LinphoneCallAborted; /*default status*/
return cl;
}
int linphone_core_terminate_conference(LinphoneCore *lc);
int linphone_core_get_conference_size(LinphoneCore *lc);
+int linphone_core_start_conference_recording(LinphoneCore *lc, const char *path);
+int linphone_core_stop_conference_recording(LinphoneCore *lc);
int linphone_core_get_max_calls(LinphoneCore *lc);
void linphone_core_set_max_calls(LinphoneCore *lc, int max);
MSAudioConference *conf;
AudioStream *local_participant;
MSAudioEndpoint *local_endpoint;
+ MSAudioEndpoint *record_endpoint;
RtpProfile *local_dummy_profile;
bool_t local_muted;
};
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkDialog" id="call_statistics">
+ <property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Call statistics</property>
<property name="type_hint">dialog</property>
- <signal name="response" handler="linphone_gtk_call_statistics_closed"/>
+ <signal name="response" handler="linphone_gtk_call_statistics_closed" swapped="no"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
- <property name="n_rows">6</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">7</property>
<property name="n_columns">2</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkLabel" id="audio_codec_label">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Audio codec</property>
</object>
<packing>
<child>
<object class="GtkLabel" id="video_codec_label">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Video codec</property>
</object>
<packing>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Audio IP bandwidth usage</property>
</object>
<packing>
<child>
<object class="GtkLabel" id="audio_codec">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<child>
<object class="GtkLabel" id="video_codec">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<child>
<object class="GtkLabel" id="audio_bandwidth_usage">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Audio Media connectivity</property>
</object>
<packing>
<child>
<object class="GtkLabel" id="audio_media_connectivity">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Video IP bandwidth usage</property>
</object>
<packing>
<child>
<object class="GtkLabel" id="video_bandwidth_usage">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Video Media connectivity</property>
</object>
<packing>
<child>
<object class="GtkLabel" id="video_media_connectivity">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="bottom_attach">6</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Round trip time</property>
+ </object>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="round_trip_time">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ </packing>
+ </child>
</object>
</child>
</object>
<child type="label">
<object class="GtkLabel" id="call_statistics_label">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes"><b>Call statistics and information</b></property>
<property name="use_markup">True</property>
</object>
<property name="position">1</property>
</packing>
</child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkButton" id="button1">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
</object>
</child>
<action-widgets>
#define PADDING_PIXELS 4
+/*
+ * conferencee_box = a vbox where participants are added or removed
+ * conf_frame = the conference tab
+ */
+
static GtkWidget *create_conference_label(void){
GtkWidget *box=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(box),gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU),FALSE,FALSE,0);
linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_core_get_conference_local_input_volume, linphone_gtk_get_core());
}
-static GtkWidget *get_conference_tab(GtkWidget *mw){
- GtkWidget *box=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conference_tab");
- GtkWidget *conf_frame=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conf_frame");
- if(conf_frame!=NULL){
- if (box==NULL){
- GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
- box=gtk_vbox_new(FALSE,0);
- GtkWidget *participant=linphone_gtk_create_widget("main","callee_frame");
- gtk_box_set_homogeneous(GTK_BOX(box),TRUE);
- init_local_participant(participant);
- gtk_box_pack_start(GTK_BOX(box),participant,FALSE,FALSE,PADDING_PIXELS);
- gtk_widget_show(box);
- g_object_set_data(G_OBJECT(mw),"conference_tab",box);
- gtk_box_pack_start(GTK_BOX(conf_box),box,FALSE,FALSE,PADDING_PIXELS);
- }
- }
+static GtkWidget *get_conferencee_box(GtkWidget *mw){
+ GtkWidget *box=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conferencee_box");
return box;
}
static GtkWidget *find_conferencee_from_call(LinphoneCall *call){
GtkWidget *mw=linphone_gtk_get_main_window();
- get_conference_tab(mw);
- GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
- GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
+ GtkWidget *conferencee_box=get_conferencee_box(mw);
GList *elem;
GtkWidget *ret=NULL;
+
+ if (conferencee_box==NULL) return NULL;
+
if (call!=NULL){
- GList *l=gtk_container_get_children(GTK_CONTAINER(conf_box));
+ GList *l=gtk_container_get_children(GTK_CONTAINER(conferencee_box));
for(elem=l;elem!=NULL;elem=elem->next){
GtkWidget *frame=(GtkWidget*)elem->data;
if (call==g_object_get_data(G_OBJECT(frame),"call")){
return ret;
}
-void linphone_gtk_set_in_conference(LinphoneCall *call){
+static GtkWidget * create_conference_panel(void){
GtkWidget *mw=linphone_gtk_get_main_window();
+ GtkWidget *conf_frame=linphone_gtk_create_widget("main","conf_frame");
+ GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
+ GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf");
+ GtkWidget *image=create_pixmap("stopcall-small.png");
+ GtkWidget *box;
GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch");
+
+ gtk_button_set_image(GTK_BUTTON(button_conf),image);
+ g_signal_connect_swapped(G_OBJECT(button_conf),"clicked",(GCallback)linphone_gtk_terminate_call,NULL);
+ g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame);
+
+ box=gtk_vbox_new(FALSE,0);
+ GtkWidget *participant=linphone_gtk_create_widget("main","callee_frame");
+ gtk_widget_show(participant);
+ gtk_box_set_homogeneous(GTK_BOX(box),TRUE);
+ init_local_participant(participant);
+ gtk_box_pack_start(GTK_BOX(box),participant,FALSE,FALSE,PADDING_PIXELS);
+ gtk_widget_show(box);
+ g_object_set_data(G_OBJECT(mw),"conferencee_box",box);
+ gtk_box_pack_start(GTK_BOX(conf_box),box,FALSE,FALSE,PADDING_PIXELS);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(viewswitch),conf_frame,
+ create_conference_label());
+ return conf_frame;
+}
+
+void linphone_gtk_set_in_conference(LinphoneCall *call){
+ GtkWidget *mw=linphone_gtk_get_main_window();
GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
- g_object_set_data(G_OBJECT(mw),"is_conf",GINT_TO_POINTER(TRUE));
+ GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch");
+
if(conf_frame==NULL){
- conf_frame=linphone_gtk_create_widget("main","conf_frame");
- GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf");
- GtkWidget *image=create_pixmap("stopcall-small.png");
- gtk_button_set_image(GTK_BUTTON(button_conf),image);
- g_signal_connect_swapped(G_OBJECT(button_conf),"clicked",(GCallback)linphone_gtk_terminate_call,NULL);
- g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame);
- gtk_notebook_append_page(GTK_NOTEBOOK(viewswitch),conf_frame,
- create_conference_label());
+ conf_frame=create_conference_panel();
}
- GtkWidget *participant=find_conferencee_from_call(call);
- GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
+ GtkWidget *participant=find_conferencee_from_call(call);
+
if (participant==NULL){
- const LinphoneAddress *addr=linphone_call_get_remote_address(call);
- participant=linphone_gtk_create_widget("main","callee_frame");
+ /*create and add it */
+ GtkWidget *conferencee_box=get_conferencee_box(mw);
GtkWidget *sound_meter;
+ const LinphoneAddress *addr=linphone_call_get_remote_address(call);
gchar *markup;
+
+ participant=linphone_gtk_create_widget("main","callee_frame");
+ gtk_widget_show(participant);
if (linphone_address_get_display_name(addr)!=NULL){
markup=g_strdup_printf("<b>%s</b>",linphone_address_get_display_name(addr));
}else{
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(participant,"callee_name_label")),markup);
g_free(markup);
sound_meter=linphone_gtk_get_widget(participant,"sound_indicator");
- linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_call_get_play_volume, call);
- gtk_box_pack_start(GTK_BOX(conf_box),participant,FALSE,FALSE,PADDING_PIXELS);
+ linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_call_get_play_volume, call);
+ gtk_box_pack_start(GTK_BOX(conferencee_box),participant,FALSE,FALSE,PADDING_PIXELS);
g_object_set_data_full(G_OBJECT(participant),"call",linphone_call_ref(call),(GDestroyNotify)linphone_call_unref);
gtk_notebook_set_current_page(GTK_NOTEBOOK(viewswitch),
- gtk_notebook_page_num(GTK_NOTEBOOK(viewswitch),conf_frame));
+ gtk_notebook_page_num(GTK_NOTEBOOK(viewswitch),conf_frame));
}
}
}
void linphone_gtk_unset_from_conference(LinphoneCall *call){
- GtkWidget *mw=linphone_gtk_get_main_window();
- GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
- GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box");
- GtkWidget *frame;
- if (conf_box==NULL) return; /*conference tab already destroyed*/
- frame=find_conferencee_from_call(call);
- GList *children;
+ GtkWidget *frame=find_conferencee_from_call(call);
+
if (frame){
+ GtkWidget *mw=linphone_gtk_get_main_window();
+ GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame");
+ GtkWidget *conferencee_box=g_object_get_data(G_OBJECT(mw),"conferencee_box");
+ GList *children;
+
+ g_message("Removing a participant from conference");
gtk_widget_destroy(frame);
+ children=gtk_container_get_children(GTK_CONTAINER(conferencee_box));
+ if (g_list_length(children)==1){ /* only local participant */
+ /*the conference is terminated */
+ g_message("The conference is terminated");
+ g_object_set_data(G_OBJECT(mw),"conferencee_box",NULL);
+ gtk_widget_destroy(conf_frame);
+ g_object_set_data(G_OBJECT(mw),"conf_frame",NULL);
+ }
+ g_list_free(children);
}
- children=gtk_container_get_children(GTK_CONTAINER(conf_box));
- if (g_list_length(children)==2){
- /*the conference is terminated */
- gtk_widget_destroy(conf_box);
- g_object_set_data(G_OBJECT(mw),"conference_tab",NULL);
- }
- gtk_widget_destroy(conf_frame);
- g_list_free(children);
- g_object_set_data(G_OBJECT(mw),"is_conf",GINT_TO_POINTER(FALSE));
- g_object_set_data(G_OBJECT(mw),"conf_frame",NULL);
}
+
+
if (page!=NULL){
LinphoneCall *call=(LinphoneCall*)g_object_get_data(G_OBJECT(page),"call");
if (call==NULL){
- if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(main_window),"is_conf"))){
+ GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(main_window),"conf_frame");
+ if (conf_frame==page){
if (is_conf)
*is_conf=TRUE;
return NULL;
}
void update_tab_header(LinphoneCall *call,gboolean pause){
- GtkWidget *w=(GtkWidget*)linphone_call_get_user_pointer(call);
- GtkWidget *main_window=linphone_gtk_get_main_window();
- GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(main_window,"viewswitch"));
- gint call_index=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"call_index"));
- GtkWidget *new_label=gtk_hbox_new (FALSE,0);
- GtkWidget *i=NULL;
- if(pause){
-i=gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE,GTK_ICON_SIZE_SMALL_TOOLBAR);
- } else {
- i=create_pixmap ("startcall-small.png");
- }
+ GtkWidget *w=(GtkWidget*)linphone_call_get_user_pointer(call);
+ GtkWidget *main_window=linphone_gtk_get_main_window();
+ GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(main_window,"viewswitch"));
+ gint call_index=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"call_index"));
+ GtkWidget *new_label=gtk_hbox_new (FALSE,0);
+ GtkWidget *i=NULL;
GtkWidget *l;
- gchar *text=g_strdup_printf(_("Call #%i"),call_index);
+ gchar *text;
+
+ if(pause){
+ i=gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE,GTK_ICON_SIZE_SMALL_TOOLBAR);
+ } else {
+ i=create_pixmap ("startcall-small.png");
+ }
+
+ text=g_strdup_printf(_("Call #%i"),call_index);
l=gtk_label_new (text);
gtk_box_pack_start (GTK_BOX(new_label),i,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(new_label),l,TRUE,TRUE,0);
- gtk_notebook_set_tab_label(notebook,w,new_label);
- gtk_widget_show_all(new_label);
+ gtk_notebook_set_tab_label(notebook,w,new_label);
+ gtk_widget_show_all(new_label);
}
static void linphone_gtk_in_call_set_animation_image(GtkWidget *callview, const char *image_name, gboolean is_stock){
g_signal_connect_swapped(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_transfer_call,other_call);
}
}
- gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,0,
- gtk_get_current_event_time());
+ gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,0,gtk_get_current_event_time());
gtk_widget_show(menu);
}
gtk_widget_set_sensitive(button,FALSE);
g_object_set_data(G_OBJECT(linphone_gtk_get_main_window()),"conf_frame",NULL);
linphone_core_add_all_to_conference(linphone_gtk_get_core());
- //linphone_core_add_to_conference(linphone_gtk_get_core(),(LinphoneCall*)call_ref);
}
GtkWidget *acodec_ui=linphone_gtk_get_widget(callstats,"audio_codec");
GtkWidget *vcodec_ui=linphone_gtk_get_widget(callstats,"video_codec");
if (acodec){
-
char tmp[64]={0};
snprintf(tmp,sizeof(tmp)-1,"%s/%i/%i",acodec->mime_type,acodec->clock_rate,acodec->channels);
gtk_label_set_label(GTK_LABEL(acodec_ui),tmp);
static void _refresh_call_stats(GtkWidget *callstats, LinphoneCall *call){
const LinphoneCallStats *as=linphone_call_get_audio_stats(call);
const LinphoneCallStats *vs=linphone_call_get_video_stats(call);
- const char *audio_media_connectivity = _("Direct");
- const char *video_media_connectivity = _("Direct");
+ const char *audio_media_connectivity = _("Direct or through server");
+ const char *video_media_connectivity = _("Direct or through server");
+ gboolean has_video=linphone_call_params_video_enabled(linphone_call_get_current_params(call));
gchar *tmp=g_strdup_printf(_("download: %f\nupload: %f (kbit/s)"),
as->download_bandwidth,as->upload_bandwidth);
+
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"audio_bandwidth_usage")),tmp);
g_free(tmp);
- tmp=g_strdup_printf(_("download: %f\nupload: %f (kbit/s)"),
- vs->download_bandwidth,vs->upload_bandwidth);
+ if (has_video)
+ tmp=g_strdup_printf(_("download: %f\nupload: %f (kbit/s)"),vs->download_bandwidth,vs->upload_bandwidth);
+ else tmp=NULL;
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"video_bandwidth_usage")),tmp);
- g_free(tmp);
+ if (tmp) g_free(tmp);
if(as->upnp_state != LinphoneUpnpStateNotAvailable && as->upnp_state != LinphoneUpnpStateIdle) {
audio_media_connectivity = upnp_state_to_string(as->upnp_state);
} else if(as->ice_state != LinphoneIceStateNotActivated) {
audio_media_connectivity = ice_state_to_string(as->ice_state);
}
gtk_label_set_text(GTK_LABEL(linphone_gtk_get_widget(callstats,"audio_media_connectivity")),audio_media_connectivity);
- if(vs->upnp_state != LinphoneUpnpStateNotAvailable && vs->upnp_state != LinphoneUpnpStateIdle) {
- video_media_connectivity = upnp_state_to_string(vs->upnp_state);
- } else if(vs->ice_state != LinphoneIceStateNotActivated) {
- video_media_connectivity = ice_state_to_string(vs->ice_state);
- }
+
+ if (has_video){
+ if(vs->upnp_state != LinphoneUpnpStateNotAvailable && vs->upnp_state != LinphoneUpnpStateIdle) {
+ video_media_connectivity = upnp_state_to_string(vs->upnp_state);
+ } else if(vs->ice_state != LinphoneIceStateNotActivated) {
+ video_media_connectivity = ice_state_to_string(vs->ice_state);
+ }
+ }else video_media_connectivity=NULL;
gtk_label_set_text(GTK_LABEL(linphone_gtk_get_widget(callstats,"video_media_connectivity")),video_media_connectivity);
+
+ if (as->round_trip_delay>0){
+ tmp=g_strdup_printf(_("%.3f seconds"),as->round_trip_delay);
+ gtk_label_set_text(GTK_LABEL(linphone_gtk_get_widget(callstats,"round_trip_time")),tmp);
+ g_free(tmp);
+ }
}
static gboolean refresh_call_stats(GtkWidget *callstats){
if (in_conf){
linphone_gtk_set_in_conference(call);
gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"incall_mute"),FALSE);
+ }else{
+ linphone_gtk_unset_from_conference(call); /*in case it was previously*/
+ gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"incall_mute"),TRUE);
}
gtk_widget_show_all(linphone_gtk_get_widget(callview,"buttons_panel"));
if (!in_conf) gtk_widget_show_all(linphone_gtk_get_widget(callview,"record_hbox"));
void linphone_gtk_record_call_toggled(GtkWidget *button){
gboolean active=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
- LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL);
- GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer (call);
- const LinphoneCallParams *params=linphone_call_get_current_params(call);
- const char *filepath=linphone_call_params_get_record_file(params);
- gchar *message=g_strdup_printf(_("<small><i>Recording into %s %s</i></small>"),filepath,active ? "" : _("(Paused)"));
+ gboolean is_conf=FALSE;
+ const char *filepath;
+ gchar *message;
+ LinphoneCore *lc=linphone_gtk_get_core();
+ LinphoneCall *call=linphone_gtk_get_currently_displayed_call(&is_conf);
+ GtkWidget *callview;
+ GtkWidget *label;
+ if (call){
+ callview=(GtkWidget*)linphone_call_get_user_pointer (call);
+ const LinphoneCallParams *params=linphone_call_get_current_params(call);
+ filepath=linphone_call_params_get_record_file(params);
+ label=linphone_gtk_get_widget(callview,"record_status");
+ }else if (is_conf){
+ GtkWidget *mw=linphone_gtk_get_main_window();
+ callview=(GtkWidget *)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"conf_frame");
+ label=linphone_gtk_get_widget(callview,"conf_record_status");
+ filepath=(const char*)g_object_get_data(G_OBJECT(mw),"conf_record_path");
+ if (filepath==NULL){
+ filepath=linphone_gtk_get_record_path(NULL,TRUE);
+ g_object_set_data_full(G_OBJECT(mw),"conf_record_path",(char*)filepath,g_free);
+ }
+ }else{
+ g_warning("linphone_gtk_record_call_toggled(): bug.");
+ return;
+ }
+ message=g_strdup_printf(_("<small><i>Recording into\n%s %s</i></small>"),filepath,active ? "" : _("(Paused)"));
if (active){
- linphone_call_start_recording(call);
+ if (call)
+ linphone_call_start_recording(call);
+ else
+ linphone_core_start_conference_recording(lc,filepath);
}else {
- linphone_call_stop_recording(call);
+ if (call)
+ linphone_call_stop_recording(call);
+ else
+ linphone_core_stop_conference_recording(lc);
+
}
- gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callview,"record_status")),message);
+ gtk_label_set_markup(GTK_LABEL(label),message);
g_free(message);
}
void linphone_gtk_monitor_usb(void);
void linphone_gtk_unmonitor_usb(void);
+gchar *linphone_gtk_get_record_path(const LinphoneAddress *address, gboolean is_conference);
+
}
}
-gchar *linphone_gtk_get_call_record_path(LinphoneAddress *address){
+gchar *linphone_gtk_get_record_path(const LinphoneAddress *address, gboolean is_conference){
const char *dir=g_get_user_special_dir(G_USER_DIRECTORY_MUSIC);
- const char *id=linphone_address_get_username(address);
+ const char *id="unknown";
char filename[256]={0};
- if (id==NULL) id=linphone_address_get_domain(address);
- snprintf(filename,sizeof(filename)-1,"%s-%lu-%s-record.wav",
- linphone_gtk_get_ui_config("title","Linphone"),
- (unsigned long)time(NULL),id);
+ char date[64]={0};
+ time_t curtime=time(NULL);
+ struct tm loctime;
+
+#ifdef WIN32
+ loctime=*localtime(&curtime);
+#else
+ localtime_r(&curtime,&loctime);
+#endif
+ snprintf(date,sizeof(date)-1,"%i%02i%02i-%02i%02i",loctime.tm_year+1900,loctime.tm_mon+1,loctime.tm_mday, loctime.tm_hour, loctime.tm_min);
+
+ if (address){
+ id=linphone_address_get_username(address);
+ if (id==NULL) id=linphone_address_get_domain(address);
+ }
+ if (is_conference){
+ snprintf(filename,sizeof(filename)-1,"%s-conference-%s.wav",
+ linphone_gtk_get_ui_config("title","Linphone"),
+ date);
+ }else{
+ snprintf(filename,sizeof(filename)-1,"%s-call-%s-%s.wav",
+ linphone_gtk_get_ui_config("title","Linphone"),
+ date,
+ id);
+ }
return g_build_filename(dir,filename,NULL);
}
if (addr!=NULL){
LinphoneCallParams *params=linphone_core_create_default_call_parameters(lc);
- gchar *record_file=linphone_gtk_get_call_record_path(addr);
+ gchar *record_file=linphone_gtk_get_record_path(addr,FALSE);
linphone_call_params_set_record_file(params,record_file);
linphone_core_invite_address_with_params(lc,addr,params);
completion_add_text(GTK_ENTRY(uri_bar),entered);
return FALSE;
}
+
+static void accept_incoming_call(LinphoneCall *call){
+ LinphoneCore *lc=linphone_gtk_get_core();
+ LinphoneCallParams *params=linphone_core_create_default_call_parameters(lc);
+ gchar *record_file=linphone_gtk_get_record_path(linphone_call_get_remote_address(call),FALSE);
+ linphone_call_params_set_record_file(params,record_file);
+ linphone_core_accept_call_with_params(lc,call,params);
+ linphone_call_params_destroy(params);
+}
+
static gboolean linphone_gtk_auto_answer(LinphoneCall *call){
- if (linphone_call_get_state(call)==LinphoneCallIncomingReceived){
- linphone_core_accept_call (linphone_gtk_get_core(),call);
+ LinphoneCallState state=linphone_call_get_state(call);
+ if (state==LinphoneCallIncomingReceived || state==LinphoneCallIncomingEarlyMedia){
+ accept_incoming_call(call);
linphone_call_unref(call);
}
return FALSE;
}
void linphone_gtk_start_call(GtkWidget *w){
- LinphoneCore *lc=linphone_gtk_get_core();
- LinphoneCall *call;
+ LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL);
/*change into in-call mode, then do the work later as it might block a bit */
GtkWidget *mw=gtk_widget_get_toplevel(w);
GtkWidget *uri_bar=linphone_gtk_get_widget(mw,"uribar");
+ LinphoneCallState state= call ? linphone_call_get_state(call) : LinphoneCallIdle;
- call=linphone_gtk_get_currently_displayed_call(NULL);
- if (call!=NULL && linphone_call_get_state(call)==LinphoneCallIncomingReceived){
- linphone_core_accept_call(lc,call);
+ if (state == LinphoneCallIncomingReceived || state == LinphoneCallIncomingEarlyMedia){
+ accept_incoming_call(call);
}else{
/*immediately disable the button and delay a bit the execution the linphone_core_invite()
so that we don't freeze the button. linphone_core_invite() might block for some hundreds of milliseconds*/
void linphone_gtk_answer_clicked(GtkWidget *button){
LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL);
if (call){
- linphone_core_accept_call(linphone_gtk_get_core(),call);
+ accept_incoming_call(call);
linphone_gtk_show_main_window(); /* useful when the button is clicked on a notification */
}
}
<object class="GtkVBox" id="conf_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <child>
- <placeholder/>
- </child>
<child>
<object class="GtkHButtonBox" id="button_conf">
<property name="visible">True</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="conf_record_hbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToggleButton" id="conf_record_button">
+ <property name="label">gtk-media-record</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ <signal name="toggled" handler="linphone_gtk_record_call_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="conf_record_status">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">char</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
}
g_signal_connect(G_OBJECT(combo),"changed",(GCallback)linphone_gtk_media_encryption_changed,NULL);
}
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"media_encryption_mandatory")),linphone_core_is_media_encryption_mandatory(lc));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"media_encryption_mandatory")),
+ linphone_core_is_media_encryption_mandatory(lc));
g_object_unref(G_OBJECT(model));
}
if (pb==NULL) {
pb=linphone_gtk_create_window("parameters");
g_object_set_data(G_OBJECT(mw),"parameters",pb);
- ms_error("linphone_gtk_show_paramters: create");
}else {
gtk_widget_show(pb);
- ms_error("linphone_gtk_show_parameters: show");
return;
}
codec_list=linphone_gtk_get_widget(pb,"codec_list");
linphone_core_ipv6_enabled(lc));
linphone_core_get_sip_transports(lc,&tr);
- if (tr.tcp_port > 0) {
- gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+ if (tr.tcp_port > 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
tr.tcp_port);
- }
- else if (tr.tls_port > 0) {
- gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+ }
+ else if (tr.tls_port > 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
tr.tls_port);
- }
- else {
- gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+ }
+ else {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
tr.udp_port);
- }
+ }
linphone_core_get_audio_port_range(lc, &min_port, &max_port);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port")), min_port);
+++ /dev/null
-<?xml version = '1.0'?>
-<kdevelop>
- <general>
- <author>Simon Morlat</author>
- <email>simon.morlat@linphone.org</email>
- <version>[3.1.2]</version>
- <projectmanagement>KDevCustomProject</projectmanagement>
- <primarylanguage>C</primarylanguage>
- <ignoreparts/>
- <projectname>linphone</projectname>
- <projectdirectory>.</projectdirectory>
- <absoluteprojectpath>false</absoluteprojectpath>
- <description/>
- <defaultencoding/>
- </general>
- <kdevcustomproject>
- <run>
- <directoryradio>executable</directoryradio>
- <mainprogram>gtk-glade/linphone</mainprogram>
- <programargs/>
- <globaldebugarguments/>
- <globalcwd/>
- <useglobalprogram>false</useglobalprogram>
- <terminal>false</terminal>
- <autocompile>false</autocompile>
- <autoinstall>false</autoinstall>
- <autokdesu>false</autokdesu>
- <envvars/>
- </run>
- <filetypes>
- <filetype>*.java</filetype>
- <filetype>*.h</filetype>
- <filetype>*.H</filetype>
- <filetype>*.hh</filetype>
- <filetype>*.hxx</filetype>
- <filetype>*.hpp</filetype>
- <filetype>*.c</filetype>
- <filetype>*.C</filetype>
- <filetype>*.cc</filetype>
- <filetype>*.cpp</filetype>
- <filetype>*.c++</filetype>
- <filetype>*.cxx</filetype>
- </filetypes>
- <blacklist>
- <path>config.h</path>
- <path>exosip</path>
- <path>exosip/eXosip2.h</path>
- <path>exosip/eXosip.c</path>
- <path>exosip/eXosip_cfg.h</path>
- <path>exosip/eXosip.h</path>
- <path>exosip/eXutils.c</path>
- <path>exosip/jauth.c</path>
- <path>exosip/jcallback.c</path>
- <path>exosip/jcall.c</path>
- <path>exosip/jdialog.c</path>
- <path>exosip/jevents.c</path>
- <path>exosip/jfreinds.c</path>
- <path>exosip/jidentity.c</path>
- <path>exosip/jnotify.c</path>
- <path>exosip/jpipe.c</path>
- <path>exosip/jpipe.h</path>
- <path>exosip/jpublish.c</path>
- <path>exosip/jreg.c</path>
- <path>exosip/jrequest.c</path>
- <path>exosip/jresponse.c</path>
- <path>exosip/jsubscribe.c</path>
- <path>exosip/jsubscribers.c</path>
- <path>exosip/misc.c</path>
- <path>exosip/sdp_offans.c</path>
- <path>exosip/udp.c</path>
- <path>gnome</path>
- <path>gnome/addressbook.c</path>
- <path>gnome/addressbook.h</path>
- <path>gnome/applet.c</path>
- <path>gnome/callbacks.c</path>
- <path>gnome/callbacks.h</path>
- <path>gnome/friends.c</path>
- <path>gnome/friends.h</path>
- <path>gnome/gui_utils.c</path>
- <path>gnome/gui_utils.h</path>
- <path>gnome/interface.c</path>
- <path>gnome/interface.h</path>
- <path>gnome/linphone.c</path>
- <path>gnome/linphone.h</path>
- <path>gnome/main.c</path>
- <path>gnome/presence.c</path>
- <path>gnome/presence.h</path>
- <path>gnome/propertybox.c</path>
- <path>gnome/propertybox.h</path>
- <path>gnome/support.c</path>
- <path>gnome/support.h</path>
- <path>gsmlib</path>
- <path>gsmlib/code.c</path>
- <path>gsmlib/config.h</path>
- <path>gsmlib/debug.c</path>
- <path>gsmlib/decode.c</path>
- <path>gsmlib/gsmadd.c</path>
- <path>gsmlib/gsm_create.c</path>
- <path>gsmlib/gsm_decode.c</path>
- <path>gsmlib/gsm_destroy.c</path>
- <path>gsmlib/gsm_encode.c</path>
- <path>gsmlib/gsm_explode.c</path>
- <path>gsmlib/gsm.h</path>
- <path>gsmlib/gsm_implode.c</path>
- <path>gsmlib/gsm_option.c</path>
- <path>gsmlib/gsm_print.c</path>
- <path>gsmlib/gsm_wrapper.c</path>
- <path>gsmlib/gsm_wrapper.h</path>
- <path>gsmlib/long_term.c</path>
- <path>gsmlib/lpc.c</path>
- <path>gsmlib/preprocess.c</path>
- <path>gsmlib/private.h</path>
- <path>gsmlib/proto.h</path>
- <path>gsmlib/rpe.c</path>
- <path>gsmlib/short_term.c</path>
- <path>gsmlib/table.c</path>
- <path>gsmlib/toast.h</path>
- <path>gsmlib/unproto.h</path>
- <path>gtk</path>
- <path>gtk/addressbook.c</path>
- <path>gtk/addressbook.h</path>
- <path>gtk/applet.c</path>
- <path>gtk/callbacks.c</path>
- <path>gtk/callbacks.h</path>
- <path>gtk/friends.c</path>
- <path>gtk/friends.h</path>
- <path>gtk/gui_utils.c</path>
- <path>gtk/gui_utils.h</path>
- <path>gtk/interface.c</path>
- <path>gtk/interface.h</path>
- <path>gtk/linphone.c</path>
- <path>gtk/linphone.h</path>
- <path>gtk/main.c</path>
- <path>gtk/presence.c</path>
- <path>gtk/presence.h</path>
- <path>gtk/propertybox.c</path>
- <path>gtk/propertybox.h</path>
- <path>gtk/support.c</path>
- <path>gtk/support.h</path>
- <path>intl</path>
- <path>intl/bindtextdom.c</path>
- <path>intl/cat-compat.c</path>
- <path>intl/dcgettext.c</path>
- <path>intl/dgettext.c</path>
- <path>intl/explodename.c</path>
- <path>intl/finddomain.c</path>
- <path>intl/gettext.c</path>
- <path>intl/gettext.h</path>
- <path>intl/gettextP.h</path>
- <path>intl/hash-string.h</path>
- <path>intl/intl-compat.c</path>
- <path>intl/l10nflist.c</path>
- <path>intl/libgettext.h</path>
- <path>intl/loadinfo.h</path>
- <path>intl/loadmsgcat.c</path>
- <path>intl/localealias.c</path>
- <path>intl/textdomain.c</path>
- <path>lpc10-1.5</path>
- <path>lpc10-1.5/analys.c</path>
- <path>lpc10-1.5/bitio.c</path>
- <path>lpc10-1.5/bsynz.c</path>
- <path>lpc10-1.5/chanwr.c</path>
- <path>lpc10-1.5/dcbias.c</path>
- <path>lpc10-1.5/decode.c</path>
- <path>lpc10-1.5/deemp.c</path>
- <path>lpc10-1.5/difmag.c</path>
- <path>lpc10-1.5/dyptrk.c</path>
- <path>lpc10-1.5/encode.c</path>
- <path>lpc10-1.5/energy.c</path>
- <path>lpc10-1.5/f2c.h</path>
- <path>lpc10-1.5/f2clib.c</path>
- <path>lpc10-1.5/ham84.c</path>
- <path>lpc10-1.5/hp100.c</path>
- <path>lpc10-1.5/invert.c</path>
- <path>lpc10-1.5/irc2pc.c</path>
- <path>lpc10-1.5/ivfilt.c</path>
- <path>lpc10-1.5/lpc10.h</path>
- <path>lpc10-1.5/lpc10_wrapper.c</path>
- <path>lpc10-1.5/lpc10_wrapper.h</path>
- <path>lpc10-1.5/lpcdec.c</path>
- <path>lpc10-1.5/lpcenc.c</path>
- <path>lpc10-1.5/lpcini.c</path>
- <path>lpc10-1.5/lpfilt.c</path>
- <path>lpc10-1.5/median.c</path>
- <path>lpc10-1.5/mload.c</path>
- <path>lpc10-1.5/onset.c</path>
- <path>lpc10-1.5/pitsyn.c</path>
- <path>lpc10-1.5/placea.c</path>
- <path>lpc10-1.5/placev.c</path>
- <path>lpc10-1.5/preemp.c</path>
- <path>lpc10-1.5/prepro.c</path>
- <path>lpc10-1.5/random.c</path>
- <path>lpc10-1.5/rcchk.c</path>
- <path>lpc10-1.5/synths.c</path>
- <path>lpc10-1.5/tbdm.c</path>
- <path>lpc10-1.5/voicin.c</path>
- <path>lpc10-1.5/vparms.c</path>
- <path>media_api</path>
- <path>media_api/apitest.c</path>
- <path>media_api/apitest.h</path>
- <path>media_api/basiccall.c</path>
- <path>media_api/basiccall.h</path>
- <path>media_api/callmember.c</path>
- <path>media_api/callmember.h</path>
- <path>media_api/common.h</path>
- <path>media_api/media_api.c</path>
- <path>media_api/media_api.h</path>
- <path>media_api/mediaflow.c</path>
- <path>media_api/mediaflow.h</path>
- <path>mediastreamer</path>
- <path>mediastreamer/affine.c</path>
- <path>mediastreamer/affine.h</path>
- <path>mediastreamer/alsacard.c</path>
- <path>mediastreamer/alsacard.h</path>
- <path>mediastreamer/audiostream.c</path>
- <path>mediastreamer/g711common.h</path>
- <path>mediastreamer/hpuxsndcard.c</path>
- <path>mediastreamer/jackcard.c</path>
- <path>mediastreamer/jackcard.h</path>
- <path>mediastreamer/mediastream.c</path>
- <path>mediastreamer/mediastream.h</path>
- <path>mediastreamer/msAlawdec.c</path>
- <path>mediastreamer/msAlawdec.h</path>
- <path>mediastreamer/msAlawenc.c</path>
- <path>mediastreamer/msAlawenc.h</path>
- <path>mediastreamer/msavdecoder.c</path>
- <path>mediastreamer/msavdecoder.h</path>
- <path>mediastreamer/msavencoder.c</path>
- <path>mediastreamer/msavencoder.h</path>
- <path>mediastreamer/msbuffer.c</path>
- <path>mediastreamer/msbuffer.h</path>
- <path>mediastreamer/ms.c</path>
- <path>mediastreamer/mscodec.c</path>
- <path>mediastreamer/mscodec.h</path>
- <path>mediastreamer/mscopy.c</path>
- <path>mediastreamer/mscopy.h</path>
- <path>mediastreamer/msfdispatcher.c</path>
- <path>mediastreamer/msfdispatcher.h</path>
- <path>mediastreamer/msfifo.c</path>
- <path>mediastreamer/msfifo.h</path>
- <path>mediastreamer/msfilter.c</path>
- <path>mediastreamer/msfilter.h</path>
- <path>mediastreamer/msGSMdecoder.c</path>
- <path>mediastreamer/msGSMdecoder.h</path>
- <path>mediastreamer/msGSMencoder.c</path>
- <path>mediastreamer/msGSMencoder.h</path>
- <path>mediastreamer/ms.h</path>
- <path>mediastreamer/msLPC10decoder.c</path>
- <path>mediastreamer/msLPC10decoder.h</path>
- <path>mediastreamer/msLPC10encoder.c</path>
- <path>mediastreamer/msLPC10encoder.h</path>
- <path>mediastreamer/msMUlawdec.c</path>
- <path>mediastreamer/msMUlawdec.h</path>
- <path>mediastreamer/msMUlawenc.c</path>
- <path>mediastreamer/msMUlawenc.h</path>
- <path>mediastreamer/msnosync.c</path>
- <path>mediastreamer/msnosync.h</path>
- <path>mediastreamer/msossread.c</path>
- <path>mediastreamer/msossread.h</path>
- <path>mediastreamer/msosswrite.c</path>
- <path>mediastreamer/msosswrite.h</path>
- <path>mediastreamer/msqdispatcher.c</path>
- <path>mediastreamer/msqdispatcher.h</path>
- <path>mediastreamer/msqueue.c</path>
- <path>mediastreamer/msqueue.h</path>
- <path>mediastreamer/msread.c</path>
- <path>mediastreamer/msread.h</path>
- <path>mediastreamer/msringplayer.c</path>
- <path>mediastreamer/msringplayer.h</path>
- <path>mediastreamer/msrtprecv.c</path>
- <path>mediastreamer/msrtprecv.h</path>
- <path>mediastreamer/msrtpsend.c</path>
- <path>mediastreamer/msrtpsend.h</path>
- <path>mediastreamer/mssdlout.c</path>
- <path>mediastreamer/mssdlout.h</path>
- <path>mediastreamer/mssmpeg.c</path>
- <path>mediastreamer/mssmpeg.h</path>
- <path>mediastreamer/mssoundread.c</path>
- <path>mediastreamer/mssoundread.h</path>
- <path>mediastreamer/mssoundwrite.c</path>
- <path>mediastreamer/mssoundwrite.h</path>
- <path>mediastreamer/msspeexdec.c</path>
- <path>mediastreamer/msspeexdec.h</path>
- <path>mediastreamer/msspeexenc.c</path>
- <path>mediastreamer/msspeexenc.h</path>
- <path>mediastreamer/mssync.c</path>
- <path>mediastreamer/mssync.h</path>
- <path>mediastreamer/mstcpclient.c</path>
- <path>mediastreamer/mstcpclient.h</path>
- <path>mediastreamer/mstcpserv.c</path>
- <path>mediastreamer/mstcpserv.h</path>
- <path>mediastreamer/mstimer.c</path>
- <path>mediastreamer/mstimer.h</path>
- <path>mediastreamer/mstruespeechdecoder.c</path>
- <path>mediastreamer/mstruespeechdecoder.h</path>
- <path>mediastreamer/mstruespeechencoder.c</path>
- <path>mediastreamer/mstruespeechencoder.h</path>
- <path>mediastreamer/msutils.h</path>
- <path>mediastreamer/msv4l.c</path>
- <path>mediastreamer/msv4l.h</path>
- <path>mediastreamer/msvideooutput.c</path>
- <path>mediastreamer/msvideooutput.h</path>
- <path>mediastreamer/msvideosource.c</path>
- <path>mediastreamer/msvideosource.h</path>
- <path>mediastreamer/mswrite.c</path>
- <path>mediastreamer/mswrite.h</path>
- <path>mediastreamer/msxine.c</path>
- <path>mediastreamer/msxine.h</path>
- <path>mediastreamer/osscard.c</path>
- <path>mediastreamer/osscard.h</path>
- <path>mediastreamer/rfc2429.h</path>
- <path>mediastreamer/ring_test.c</path>
- <path>mediastreamer/sndcard.c</path>
- <path>mediastreamer/sndcard.h</path>
- <path>mediastreamer/test_alaw.c</path>
- <path>mediastreamer/test.c</path>
- <path>mediastreamer/test_gsm.c</path>
- <path>mediastreamer/test_lpc10.c</path>
- <path>mediastreamer/test_mulaw.c</path>
- <path>mediastreamer/test_rtprecv.c</path>
- <path>mediastreamer/test_smpeg.c</path>
- <path>mediastreamer/test_speex.c</path>
- <path>mediastreamer/test_truespeech.c</path>
- <path>mediastreamer/test_v4l.c</path>
- <path>mediastreamer/test_videostream.c</path>
- <path>mediastreamer/test_xine.c</path>
- <path>mediastreamer/videoclient.c</path>
- <path>mediastreamer/videoserver.c</path>
- <path>mediastreamer/videostream.c</path>
- <path>mediastreamer/waveheader.h</path>
- <path>po</path>
- <path>po/cat-id-tbl.c</path>
- <path>win32acm</path>
- <path>win32acm/afl.c</path>
- <path>win32acm/com.h</path>
- <path>win32acm/config.h</path>
- <path>win32acm/cpudetect.c</path>
- <path>win32acm/cpudetect.h</path>
- <path>win32acm/cputable.h</path>
- <path>win32acm/driver.c</path>
- <path>win32acm/driver.h</path>
- <path>win32acm/elfdll.c</path>
- <path>win32acm/ext.c</path>
- <path>win32acm/ext.h</path>
- <path>win32acm/ldt_keeper.c</path>
- <path>win32acm/ldt_keeper.h</path>
- <path>win32acm/loader.h</path>
- <path>win32acm/module.c</path>
- <path>win32acm/mp_msg.c</path>
- <path>win32acm/mp_msg.h</path>
- <path>win32acm/pe_image.c</path>
- <path>win32acm/pe_resource.c</path>
- <path>win32acm/registry.c</path>
- <path>win32acm/registry.h</path>
- <path>win32acm/resource.c</path>
- <path>win32acm/test_truespeech.c</path>
- <path>win32acm/win32.c</path>
- <path>win32acm/win32codec.c</path>
- <path>win32acm/win32codec.h</path>
- <path>win32acm/win32.h</path>
- <path>win32acm/wine</path>
- <path>win32acm/wine/basetsd.h</path>
- <path>win32acm/wine/debugtools.h</path>
- <path>win32acm/wine/driver.h</path>
- <path>win32acm/wine/elfdll.h</path>
- <path>win32acm/wine/heap.h</path>
- <path>win32acm/wine/ldt.h</path>
- <path>win32acm/wine/mmreg.h</path>
- <path>win32acm/wine/module.h</path>
- <path>win32acm/wine/msacmdrv.h</path>
- <path>win32acm/wine/msacm.h</path>
- <path>win32acm/wine/ntdef.h</path>
- <path>win32acm/wine/pe_image.h</path>
- <path>win32acm/wine/poppack.h</path>
- <path>win32acm/wine/pshpack1.h</path>
- <path>win32acm/wine/pshpack2.h</path>
- <path>win32acm/wine/pshpack4.h</path>
- <path>win32acm/wine/pshpack8.h</path>
- <path>win32acm/wine/vfw.h</path>
- <path>win32acm/wine/winbase.h</path>
- <path>win32acm/wine/windef.h</path>
- <path>win32acm/wine/windows.h</path>
- <path>win32acm/wine/winerror.h</path>
- <path>win32acm/wine/winestring.h</path>
- <path>win32acm/wine/winnt.h</path>
- <path>win32acm/wine/winreg.h</path>
- <path>win32acm/wine/winuser.h</path>
- <path>win32acm/wineacm.h</path>
- <path>win32acm/wrapper.h</path>
- <path>builddate.h</path>
- </blacklist>
- <build>
- <buildtool>make</buildtool>
- <builddir/>
- </build>
- <other>
- <prio>0</prio>
- <otherbin/>
- <defaulttarget/>
- <otheroptions/>
- <selectedenvironment>default</selectedenvironment>
- <environments>
- <default/>
- </environments>
- </other>
- <make>
- <abortonerror>true</abortonerror>
- <numberofjobs>0</numberofjobs>
- <prio>0</prio>
- <dontact>false</dontact>
- <makebin/>
- <defaulttarget/>
- <makeoptions/>
- <selectedenvironment>default</selectedenvironment>
- <environments>
- <default/>
- </environments>
- </make>
- </kdevcustomproject>
- <kdevdebugger>
- <general>
- <dbgshell/>
- <gdbpath/>
- <configGdbScript/>
- <runShellScript/>
- <runGdbScript/>
- <breakonloadinglibs>true</breakonloadinglibs>
- <separatetty>false</separatetty>
- <floatingtoolbar>false</floatingtoolbar>
- <raiseGDBOnStart>false</raiseGDBOnStart>
- </general>
- <display>
- <staticmembers>false</staticmembers>
- <demanglenames>true</demanglenames>
- <outputradix>10</outputradix>
- </display>
- </kdevdebugger>
- <kdevdoctreeview>
- <ignoretocs>
- <toc>ada</toc>
- <toc>ada_bugs_gcc</toc>
- <toc>bash</toc>
- <toc>bash_bugs</toc>
- <toc>clanlib</toc>
- <toc>fortran_bugs_gcc</toc>
- <toc>gnome1</toc>
- <toc>gnustep</toc>
- <toc>gtk</toc>
- <toc>gtk_bugs</toc>
- <toc>haskell</toc>
- <toc>haskell_bugs_ghc</toc>
- <toc>java_bugs_gcc</toc>
- <toc>java_bugs_sun</toc>
- <toc>kde2book</toc>
- <toc>libstdc++</toc>
- <toc>opengl</toc>
- <toc>pascal_bugs_fp</toc>
- <toc>php</toc>
- <toc>php_bugs</toc>
- <toc>perl</toc>
- <toc>perl_bugs</toc>
- <toc>python</toc>
- <toc>python_bugs</toc>
- <toc>qt-kdev3</toc>
- <toc>ruby</toc>
- <toc>ruby_bugs</toc>
- <toc>sdl</toc>
- <toc>stl</toc>
- <toc>sw</toc>
- <toc>w3c-dom-level2-html</toc>
- <toc>w3c-svg</toc>
- <toc>w3c-uaag10</toc>
- <toc>wxwidgets_bugs</toc>
- </ignoretocs>
- <ignoreqt_xml>
- <toc>Guide to the Qt Translation Tools</toc>
- <toc>Qt Assistant Manual</toc>
- <toc>Qt Designer Manual</toc>
- <toc>Qt Reference Documentation</toc>
- <toc>qmake User Guide</toc>
- </ignoreqt_xml>
- <ignoredoxygen>
- <toc>KDE Libraries (Doxygen)</toc>
- </ignoredoxygen>
- </kdevdoctreeview>
- <kdevfilecreate>
- <filetypes/>
- <useglobaltypes>
- <type ext="c" />
- <type ext="h" />
- </useglobaltypes>
- </kdevfilecreate>
- <kdevcppsupport>
- <qt>
- <used>false</used>
- <version>3</version>
- <includestyle>3</includestyle>
- <root></root>
- <designerintegration>EmbeddedKDevDesigner</designerintegration>
- <qmake></qmake>
- <designer></designer>
- <designerpluginpaths/>
- </qt>
- <references/>
- <codecompletion>
- <automaticCodeCompletion>false</automaticCodeCompletion>
- <automaticArgumentsHint>true</automaticArgumentsHint>
- <automaticHeaderCompletion>true</automaticHeaderCompletion>
- <codeCompletionDelay>250</codeCompletionDelay>
- <argumentsHintDelay>400</argumentsHintDelay>
- <headerCompletionDelay>250</headerCompletionDelay>
- <showOnlyAccessibleItems>false</showOnlyAccessibleItems>
- <completionBoxItemOrder>0</completionBoxItemOrder>
- <howEvaluationContextMenu>true</howEvaluationContextMenu>
- <showCommentWithArgumentHint>true</showCommentWithArgumentHint>
- <statusBarTypeEvaluation>false</statusBarTypeEvaluation>
- <namespaceAliases>std=_GLIBCXX_STD;__gnu_cxx=std</namespaceAliases>
- <processPrimaryTypes>true</processPrimaryTypes>
- <processFunctionArguments>false</processFunctionArguments>
- <preProcessAllHeaders>false</preProcessAllHeaders>
- <parseMissingHeadersExperimental>false</parseMissingHeadersExperimental>
- <resolveIncludePathsUsingMakeExperimental>false</resolveIncludePathsUsingMakeExperimental>
- <alwaysParseInBackground>true</alwaysParseInBackground>
- <usePermanentCaching>true</usePermanentCaching>
- <alwaysIncludeNamespaces>false</alwaysIncludeNamespaces>
- <includePaths>.;</includePaths>
- </codecompletion>
- <creategettersetter>
- <prefixGet/>
- <prefixSet>set</prefixSet>
- <prefixVariable>m_,_</prefixVariable>
- <parameterName>theValue</parameterName>
- <inlineGet>true</inlineGet>
- <inlineSet>true</inlineSet>
- </creategettersetter>
- <splitheadersource>
- <enabled>false</enabled>
- <synchronize>true</synchronize>
- <orientation>Vertical</orientation>
- </splitheadersource>
- </kdevcppsupport>
- <kdevfileview>
- <groups>
- <hidenonprojectfiles>false</hidenonprojectfiles>
- <hidenonlocation>false</hidenonlocation>
- </groups>
- <tree>
- <hidepatterns>*.o,*.lo,CVS</hidepatterns>
- <hidenonprojectfiles>false</hidenonprojectfiles>
- </tree>
- </kdevfileview>
- <cppsupportpart>
- <filetemplates>
- <interfacesuffix>.h</interfacesuffix>
- <implementationsuffix>.cpp</implementationsuffix>
- </filetemplates>
- </cppsupportpart>
-</kdevelop>