From d12aeb4fffe1499ede70ebca159506f6355fd233 Mon Sep 17 00:00:00 2001 From: Seven Du Date: Mon, 1 Oct 2018 22:14:18 +0800 Subject: [PATCH] FS-11425 add video_codec_config_profile_name to conference to choose a different codec profile --- src/mod/applications/mod_conference/conference_video.c | 4 ++++ src/mod/applications/mod_conference/mod_conference.c | 4 ++++ src/mod/applications/mod_conference/mod_conference.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/mod/applications/mod_conference/conference_video.c b/src/mod/applications/mod_conference/conference_video.c index 022596a97c..ac0be2ccb7 100644 --- a/src/mod/applications/mod_conference/conference_video.c +++ b/src/mod/applications/mod_conference/conference_video.c @@ -3371,6 +3371,10 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr canvas->write_codecs[i] = switch_core_alloc(conference->pool, sizeof(codec_set_t)); canvas->write_codecs_count = i+1; + if (conference->video_codec_config_profile_name) { + switch_set_string(conference->video_codec_settings.video.config_profile_name, conference->video_codec_config_profile_name); + } + if (switch_core_codec_copy(check_codec, &canvas->write_codecs[i]->codec, &conference->video_codec_settings, conference->pool) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 7f93e182a1..4337f83698 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -2767,6 +2767,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co int scale_h264_canvas_height = 0; int scale_h264_canvas_fps_divisor = 0; char *scale_h264_canvas_bandwidth = NULL; + char *video_codec_config_profile_name = NULL; int tmp; /* Validate the conference name */ @@ -3136,6 +3137,8 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co if (scale_h264_canvas_fps_divisor < 0) scale_h264_canvas_fps_divisor = 0; } else if (!strcasecmp(var, "scale-h264-canvas-bandwidth") && !zstr(val)) { scale_h264_canvas_bandwidth = val; + } else if (!strcasecmp(var, "video-codec-config-profile-name") && !zstr(val)) { + video_codec_config_profile_name = val; } } @@ -3203,6 +3206,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co conference->auto_kps_debounce = auto_kps_debounce; switch_event_create_plain(&conference->variables, SWITCH_EVENT_CHANNEL_DATA); conference->conference_video_mode = conference_video_mode; + conference->video_codec_config_profile_name = switch_core_strdup(conference->pool, video_codec_config_profile_name); conference->scale_h264_canvas_width = scale_h264_canvas_width; conference->scale_h264_canvas_height = scale_h264_canvas_height; diff --git a/src/mod/applications/mod_conference/mod_conference.h b/src/mod/applications/mod_conference/mod_conference.h index 76b2b97b72..5440dd9882 100644 --- a/src/mod/applications/mod_conference/mod_conference.h +++ b/src/mod/applications/mod_conference/mod_conference.h @@ -759,6 +759,7 @@ typedef struct conference_obj { uint32_t floor_holder_score_iir; char *default_layout_name; int mux_paused; + char *video_codec_config_profile_name; } conference_obj_t; /* Relationship with another member */