]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9150 #resolve ["video-mute-exit-canvas" param combined with "video-bridge-first...
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 1 Jun 2016 01:35:00 +0000 (20:35 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 1 Jun 2016 01:35:00 +0000 (20:35 -0500)
src/mod/applications/mod_conference/conference_utils.c
src/mod/applications/mod_conference/conference_video.c
src/mod/applications/mod_conference/mod_conference.c
src/mod/applications/mod_conference/mod_conference.h

index be02472460e3b93c031116911ea01f2b8f657cb0..5e6ae06e41469302e12981c1d21a3b12f8fa9d2d 100644 (file)
@@ -166,7 +166,7 @@ void conference_utils_set_cflags(const char *flags, conference_flag_t *f)
        if (flags) {
                char *dup = strdup(flags);
                char *p;
-               char *argv[10] = { 0 };
+               char *argv[25] = { 0 };
                int i, argc = 0;
 
                for (p = dup; p && *p; p++) {
index d1d057f8f54170e1cfb8318df9a2438f7d54bfef..5fc896407b95d866fc021accaa65bf89c54fcec1 100644 (file)
@@ -2314,7 +2314,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                members_with_avatar = conference->members_with_avatar;
 
                if (conference_utils_test_flag(conference, CFLAG_VIDEO_BRIDGE_FIRST_TWO)) {
-                       if (conference->members_with_video < 3) {
+                       if (conference->members_seeing_video < 3) {
                                switch_yield(20000);
                                continue;
                        }
@@ -3729,7 +3729,7 @@ switch_status_t conference_video_thread_callback(switch_core_session_t *session,
 
 
        if (conference_utils_test_flag(member->conference, CFLAG_VIDEO_BRIDGE_FIRST_TWO)) {
-               if (member->conference->members_with_video < 3) {
+               if (member->conference->members_seeing_video < 3) {
                        conference_video_write_frame(member->conference, member, frame);
                        conference_video_check_recording(member->conference, NULL, frame);
                        switch_thread_rwlock_unlock(member->conference->rwlock);
index cc1e51ba5d551aeddc7ebfc68941c9e3902b4f7f..36bd064536c6b02d925e33eefb300e78586cb42c 100644 (file)
@@ -233,7 +233,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
        while (conference_globals.running && !conference_utils_test_flag(conference, CFLAG_DESTRUCT)) {
                switch_size_t file_sample_len = samples;
                switch_size_t file_data_len = samples * 2 * conference->channels;
-               int has_file_data = 0, members_with_video = 0, members_with_avatar = 0;
+               int has_file_data = 0, members_with_video = 0, members_with_avatar = 0, members_seeing_video = 0;
                uint32_t conference_energy = 0;
                int nomoh = 0;
                conference_member_t *floor_holder;
@@ -288,6 +288,13 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
                                        members_with_video++;
                                }
 
+                               if (switch_channel_ready(channel) && 
+                                       switch_channel_test_flag(channel, CF_VIDEO_READY) && 
+                                       imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY && 
+                                       !conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN)) {
+                                       members_seeing_video++;
+                               }
+
                                if (imember->avatar_png_img && !switch_channel_test_flag(channel, CF_VIDEO)) {
                                        members_with_avatar++;
                                }
@@ -310,6 +317,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
                }
 
                conference->members_with_video = members_with_video;
+               conference->members_seeing_video = members_seeing_video;
                conference->members_with_avatar = members_with_avatar;
 
                if (floor_holder != conference->floor_holder) {
index 9feb4e9e310bc6d827bdea71181b5663c9e2a206..43fbec8c091c0df1bd7c4ee66604064e1be66bb6 100644 (file)
@@ -568,6 +568,7 @@ typedef struct conference_obj {
        conference_video_mode_t conference_video_mode;
        int video_quality;
        int members_with_video;
+       int members_seeing_video;
        int members_with_avatar;
        uint32_t auto_kps_debounce;
        switch_codec_settings_t video_codec_settings;