From 5562e7c77acd6cea7ade444ccd8eb2da69569918 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 1 Oct 2014 21:57:09 +0200 Subject: [PATCH] allow any size for preview add missing linphone_core_get_preview_video_size() update ms2 --- coreapi/linphonecore.c | 43 ++++++++++++++++++++++++++++++------------ coreapi/linphonecore.h | 1 + mediastreamer2 | 2 +- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 55852374e..4759b3d66 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -4999,15 +4999,15 @@ int linphone_core_get_camera_sensor_rotation(LinphoneCore *lc) { } static MSVideoSizeDef supported_resolutions[]={ -#if !ANDROID & !TARGET_OS_IPHONE +#if !ANDROID && !TARGET_OS_IPHONE { { MS_VIDEO_SIZE_1080P_W, MS_VIDEO_SIZE_1080P_H } , "1080p" }, #endif -#if !ANDROID & !TARGET_OS_MAC /*limite to most common size because mac card cannot list supported resolutions*/ +#if !ANDROID && !TARGET_OS_MAC /*limit to most common sizes because mac video API cannot list supported resolutions*/ { { MS_VIDEO_SIZE_UXGA_W, MS_VIDEO_SIZE_UXGA_H } , "uxga" }, { { MS_VIDEO_SIZE_SXGA_MINUS_W, MS_VIDEO_SIZE_SXGA_MINUS_H } , "sxga-" }, #endif { { MS_VIDEO_SIZE_720P_W, MS_VIDEO_SIZE_720P_H } , "720p" }, -#if !ANDROID & !TARGET_OS_MAC +#if !ANDROID && !TARGET_OS_MAC { { MS_VIDEO_SIZE_XGA_W, MS_VIDEO_SIZE_XGA_H } , "xga" }, #endif #if !ANDROID && !TARGET_OS_IPHONE @@ -5039,23 +5039,33 @@ const MSVideoSizeDef *linphone_core_get_supported_video_sizes(LinphoneCore *lc){ static MSVideoSize video_size_get_by_name(const char *name){ MSVideoSizeDef *pdef=supported_resolutions; MSVideoSize null_vsize={0,0}; + MSVideoSize parsed; if (!name) return null_vsize; for(;pdef->name!=NULL;pdef++){ if (strcasecmp(name,pdef->name)==0){ return pdef->vsize; } } + if (sscanf(name,"%ix%i",&parsed.width,&parsed.height)==2){ + return parsed; + } ms_warning("Video resolution %s is not supported in linphone.",name); return null_vsize; } +/* warning: function not reentrant*/ static const char *video_size_get_name(MSVideoSize vsize){ MSVideoSizeDef *pdef=supported_resolutions; + static char customsize[64]={0}; for(;pdef->name!=NULL;pdef++){ if (pdef->vsize.width==vsize.width && pdef->vsize.height==vsize.height){ return pdef->name; } } + if (vsize.width && vsize.height){ + snprintf(customsize,sizeof(customsize)-1,"%ix%i",vsize.width,vsize.height); + return customsize; + } return NULL; } @@ -5104,6 +5114,7 @@ void linphone_core_set_preferred_video_size(LinphoneCore *lc, MSVideoSize vsize) * @param vsize the video resolution choosed for capuring and previewing. It can be (0,0) to not request any specific preview size and let the core optimize the processing. **/ void linphone_core_set_preview_video_size(LinphoneCore *lc, MSVideoSize vsize){ + MSVideoSize oldvsize; if (vsize.width==0 && vsize.height==0){ /*special case to reset the forced preview size mode*/ lc->video_conf.preview_vsize=vsize; @@ -5111,16 +5122,24 @@ void linphone_core_set_preview_video_size(LinphoneCore *lc, MSVideoSize vsize){ lp_config_set_string(lc->config,"video","preview_size",NULL); return; } - if (video_size_supported(vsize)){ - MSVideoSize oldvsize=lc->video_conf.preview_vsize; - lc->video_conf.preview_vsize=vsize; - if (!ms_video_size_equal(oldvsize,vsize) && lc->previewstream!=NULL){ - toggle_video_preview(lc,FALSE); - toggle_video_preview(lc,TRUE); - } - if (linphone_core_ready(lc)) - lp_config_set_string(lc->config,"video","preview_size",video_size_get_name(vsize)); + oldvsize=lc->video_conf.preview_vsize; + lc->video_conf.preview_vsize=vsize; + if (!ms_video_size_equal(oldvsize,vsize) && lc->previewstream!=NULL){ + toggle_video_preview(lc,FALSE); + toggle_video_preview(lc,TRUE); } + if (linphone_core_ready(lc)) + lp_config_set_string(lc->config,"video","preview_size",video_size_get_name(vsize)); +} + +/** + * Returns video size for the captured video if it was previously set by linphone_core_set_preview_video_size(), otherwise returns a 0,0 size. + * @see linphone_core_set_preview_video_size() + * @param lc the core + * @return a MSVideoSize +**/ +MSVideoSize linphone_core_get_preview_video_size(const LinphoneCore *lc){ + return lc->video_conf.preview_vsize; } /** diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 86feccd14..74d464e77 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -2532,6 +2532,7 @@ LINPHONE_PUBLIC const MSVideoSizeDef *linphone_core_get_supported_video_sizes(Li LINPHONE_PUBLIC void linphone_core_set_preferred_video_size(LinphoneCore *lc, MSVideoSize vsize); LINPHONE_PUBLIC void linphone_core_set_preview_video_size(LinphoneCore *lc, MSVideoSize vsize); LINPHONE_PUBLIC void linphone_core_set_preview_video_size_by_name(LinphoneCore *lc, const char *name); +LINPHONE_PUBLIC MSVideoSize linphone_core_get_preview_video_size(const LinphoneCore *lc); 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); diff --git a/mediastreamer2 b/mediastreamer2 index dbded55e1..9c2eb7f57 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit dbded55e10f03f77edfff660f38cc0b41348cc79 +Subproject commit 9c2eb7f57f8e6a484b8e8687b2690b3b619e7b01