diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index b89413cf37..26dcbe8e73 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -225,7 +225,8 @@ typedef enum { CFLAG_JSON_EVENTS = (1 << 20), CFLAG_LIVEARRAY_SYNC = (1 << 21), CFLAG_CONF_RESTART_AUTO_RECORD = (1 << 22), - CFLAG_POSITIONAL = (1 << 23) + CFLAG_POSITIONAL = (1 << 23), + CFLAG_DECODE_VIDEO = (1 << 24) } conf_flag_t; typedef enum { @@ -2244,6 +2245,10 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe switch_set_flag_locked(member, MFLAG_ACK_VIDEO); } + if (switch_test_flag(conference, CFLAG_DECODE_VIDEO)) { + switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + } + switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id); switch_channel_set_variable_printf(channel, "conference_moderator", "%s", switch_test_flag(member, MFLAG_MOD) ? "true" : "false"); switch_channel_set_variable_printf(channel, "conference_ghost", "%s", switch_test_flag(member, MFLAG_GHOST) ? "true" : "false"); @@ -8929,6 +8934,8 @@ static void set_cflags(const char *flags, uint32_t *f) *f |= CFLAG_RFC4579; } else if (!strcasecmp(argv[i], "auto-3d-position")) { *f |= CFLAG_POSITIONAL; + } else if (!strcasecmp(argv[i], "decode-video")) { + *f |= CFLAG_DECODE_VIDEO; } @@ -9201,7 +9208,6 @@ SWITCH_STANDARD_APP(conference_function) switch_channel_set_flag(channel, CF_CONFERENCE); switch_channel_set_flag(channel, CF_VIDEO_PASSIVE); - if (switch_channel_answer(channel) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Channel answer failed.\n"); goto end;