Commit 7e0e6ff1 authored by Simon Morlat's avatar Simon Morlat
Browse files

allow setting output framerate, get actual sent and received framerate from call params

parent bfc86a4a
......@@ -1035,6 +1035,8 @@ const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call){
if (vstream != NULL) {
call->current_params.sent_vsize = video_stream_get_sent_video_size(vstream);
call->current_params.recv_vsize = video_stream_get_received_video_size(vstream);
call->current_params.sent_fps = video_stream_get_sent_framerate(vstream);
call->current_params.received_fps = video_stream_get_received_framerate(vstream);
}
#endif
......@@ -1358,6 +1360,24 @@ MSVideoSize linphone_call_params_get_received_video_size(const LinphoneCallParam
return cp->recv_vsize;
}
/**
* Gets the framerate of the video that is sent.
* @param[in] cp The call parameters.
* @return the actual sent framerate in frames per seconds, 0 if not available.
*/
float linphone_call_params_get_sent_framerate(const LinphoneCallParams *cp){
return cp->sent_fps;
}
/**
* Gets the framerate of the video that is received.
* @param[in] cp The call paramaters for which to get the received framerate.
* @return the actual received framerate in frames per seconds, 0 if not available.
*/
float linphone_call_params_get_received_framerate(const LinphoneCallParams *cp){
return cp->received_fps;
}
const char * linphone_call_params_get_rtp_profile(const LinphoneCallParams *cp) {
return sal_media_proto_to_string(get_proto_from_call_params(cp));
}
......@@ -2171,6 +2191,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna
video_stream_enable_adaptive_jittcomp(call->videostream, linphone_core_video_adaptive_jittcomp_enabled(lc));
if (lc->video_conf.preview_vsize.width!=0)
video_stream_set_preview_size(call->videostream,lc->video_conf.preview_vsize);
video_stream_set_fps(call->videostream,linphone_core_get_preferred_framerate(lc));
video_stream_set_sent_video_size(call->videostream,linphone_core_get_preferred_video_size(lc));
video_stream_enable_self_view(call->videostream,lc->video_conf.selfview);
if (lc->video_window_id!=0)
......
......@@ -1000,6 +1000,8 @@ static void video_config_read(LinphoneCore *lc){
linphone_core_set_preview_video_size_by_name(lc,
lp_config_get_string(lc->config,"video","preview_size",NULL));
linphone_core_set_preferred_framerate(lc,lp_config_get_float(lc->config,"video","framerate",0));
#ifdef VIDEO_ENABLED
#if defined(ANDROID) || defined(__ios)
......@@ -4802,6 +4804,7 @@ static void toggle_video_preview(LinphoneCore *lc, bool_t val){
video_preview_set_display_filter_name(lc->previewstream,display_filter);
if (lc->preview_window_id!=0)
video_preview_set_native_window_id(lc->previewstream,lc->preview_window_id);
video_preview_set_fps(lc->previewstream,linphone_core_get_preferred_framerate(lc));
video_preview_start(lc->previewstream,lc->video_conf.device);
}
}else{
......@@ -5405,6 +5408,30 @@ MSVideoSize linphone_core_get_preferred_video_size(LinphoneCore *lc){
return lc->video_conf.vsize;
}
/**
* Set the preferred frame rate for video.
* Based on the available bandwidth constraints and network conditions, the video encoder
* remains free to lower the framerate. There is no warranty that the preferred frame rate be the actual framerate.
* used during a call. Default value is 0, which means "use encoder's default fps value".
* @ingroup media_parameters
* @param lc the LinphoneCore
* @param fps the target frame rate in number of frames per seconds.
**/
void linphone_core_set_preferred_framerate(LinphoneCore *lc, float fps){
lc->video_conf.fps=fps;
if (linphone_core_ready(lc))
lp_config_set_float(lc->config,"video","framerate",fps);
}
/**
* Returns the preferred video framerate, previously set by linphone_core_set_preferred_framerate().
* @param lc the linphone core
* @return frame rate in number of frames per seconds.
**/
float linphone_core_get_preferred_framerate(LinphoneCore *lc){
return lc->video_conf.fps;
}
/**
* Ask the core to stream audio from and to files, instead of using the soundcard.
**/
......
......@@ -431,6 +431,21 @@ LINPHONE_PUBLIC MSVideoSize linphone_call_params_get_sent_video_size(const Linph
*/
LINPHONE_PUBLIC MSVideoSize linphone_call_params_get_received_video_size(const LinphoneCallParams *cp);
/**
* Gets the framerate of the video that is sent.
* @param[in] cp The call parameters.
* @return the actual sent framerate in frames per seconds, 0 if not available.
*/
LINPHONE_PUBLIC float linphone_call_params_get_sent_framerate(const LinphoneCallParams *cp);
/**
* Gets the framerate of the video that is received.
* @param[in] cp The call paramaters for which to get the received framerate.
* @return the actual received framerate in frames per seconds, 0 if not available.
*/
LINPHONE_PUBLIC float linphone_call_params_get_received_framerate(const LinphoneCallParams *cp);
/**
* Gets the RTP profile being used.
* @param[in] cp #LinphoneCallParams object
......@@ -2232,7 +2247,8 @@ LINPHONE_PUBLIC void linphone_core_set_preview_video_size(LinphoneCore *lc, MSVi
LINPHONE_PUBLIC void linphone_core_set_preview_video_size_by_name(LinphoneCore *lc, const char *name);
LINPHONE_PUBLIC MSVideoSize linphone_core_get_preferred_video_size(LinphoneCore *lc);
LINPHONE_PUBLIC void linphone_core_set_preferred_video_size_by_name(LinphoneCore *lc, const char *name);
LINPHONE_PUBLIC void linphone_core_set_preferred_framerate(LinphoneCore *lc, float fps);
LINPHONE_PUBLIC float linphone_core_get_preferred_framerate(LinphoneCore *lc);
LINPHONE_PUBLIC void linphone_core_enable_video_preview(LinphoneCore *lc, bool_t val);
LINPHONE_PUBLIC bool_t linphone_core_video_preview_enabled(const LinphoneCore *lc);
......
......@@ -87,6 +87,7 @@ struct _LinphoneCallParams{
PayloadType *video_codec; /*video codec currently in use */
MSVideoSize sent_vsize; /* Size of the video currently being sent */
MSVideoSize recv_vsize; /* Size of the video currently being received */
float received_fps,sent_fps;
int down_bw;
int up_bw;
int down_ptime;
......@@ -592,6 +593,7 @@ typedef struct video_config{
const char **cams;
MSVideoSize vsize;
MSVideoSize preview_vsize; /*is 0,0 if no forced preview size is set, in which case vsize field above is used.*/
float fps;
bool_t capture;
bool_t show_local;
bool_t display;
......
......@@ -256,10 +256,11 @@ static void _refresh_call_stats(GtkWidget *callstats, LinphoneCall *call){
const LinphoneCallStats *vs=linphone_call_get_video_stats(call);
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));
MSVideoSize size_received = linphone_call_params_get_received_video_size(linphone_call_get_current_params(call));
MSVideoSize size_sent = linphone_call_params_get_sent_video_size(linphone_call_get_current_params(call));
const char *rtp_profile = linphone_call_params_get_rtp_profile(linphone_call_get_current_params(call));
const LinphoneCallParams *curparams=linphone_call_get_current_params(call);
gboolean has_video=linphone_call_params_video_enabled(curparams);
MSVideoSize size_received = linphone_call_params_get_received_video_size(curparams);
MSVideoSize size_sent = linphone_call_params_get_sent_video_size(curparams);
const char *rtp_profile = linphone_call_params_get_rtp_profile(curparams);
gchar *tmp = g_strdup_printf("%s", rtp_profile);
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"rtp_profile")),tmp);
g_free(tmp);
......@@ -268,8 +269,10 @@ static void _refresh_call_stats(GtkWidget *callstats, LinphoneCall *call){
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"audio_bandwidth_usage")),tmp);
g_free(tmp);
if (has_video){
gchar *size_r=g_strdup_printf(_("%ix%i"),size_received.width,size_received.height);
gchar *size_s=g_strdup_printf(_("%ix%i"),size_sent.width,size_sent.height);
gchar *size_r=g_strdup_printf(_("%ix%i @ %f fps"),size_received.width,size_received.height,
linphone_call_params_get_received_framerate(curparams));
gchar *size_s=g_strdup_printf(_("%ix%i @ %f fps"),size_sent.width,size_sent.height,
linphone_call_params_get_sent_framerate(curparams));
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"video_size_recv")),size_r);
gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(callstats,"video_size_sent")),size_s);
......
mediastreamer2 @ e5235883
Subproject commit 522a24e05697a6fde185492cd7aa18a0cd9fac9a
Subproject commit e5235883089d64b42cbefa8cd3d42f65af3bf67a
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment