]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8053 fix some regressions from original merge, add auto mute-unmute when toggling...
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 14 Sep 2015 21:49:55 +0000 (16:49 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 14 Sep 2015 21:49:55 +0000 (16:49 -0500)
src/mod/applications/mod_conference/conference_member.c
src/mod/applications/mod_conference/mod_conference.c
src/mod/applications/mod_conference/mod_conference.h
src/switch_core_media.c

index 594633075d56fc2770c3177522b7d8812b6285f4..664cccfae9e6eefe79c8d7f913ea9b6d13a4cea3 100644 (file)
@@ -675,7 +675,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
        switch_mutex_lock(member->audio_out_mutex);
        lock_member(member);
        switch_mutex_lock(conference->member_mutex);
-
+       
        if (member->rec) {
                conference->recording_members++;
        }
index 70c53f4e49f43bdc6a617336cb024855aef3f810..2e69d76b4f8782e4461fd0c38bc79114ce46b927 100644 (file)
@@ -288,13 +288,26 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
 
                        if (conference_utils_member_test_flag(imember, MFLAG_RUNNING) && imember->session) {
                                switch_channel_t *channel = switch_core_session_get_channel(imember->session);
-
+                               switch_media_flow_t video_media_flow;
+                               
                                if ((!floor_holder || (imember->score_iir > SCORE_IIR_SPEAKING_MAX && (floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN)))) {// &&
                                        //(!conference_utils_test_flag(conference, CFLAG_VID_FLOOR) || switch_channel_test_flag(channel, CF_VIDEO))) {
                                        floor_holder = imember;
                                }
 
-                               if (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_VIDEO) && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) {
+                               video_media_flow = switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO);
+
+                               if (video_media_flow != imember->video_media_flow) {
+                                       imember->video_media_flow = video_media_flow;
+
+                                       if (imember->video_media_flow == SWITCH_MEDIA_FLOW_SENDONLY) {
+                                               conference_utils_member_clear_flag(imember, MFLAG_CAN_BE_SEEN);
+                                       } else {
+                                               conference_utils_member_set_flag(imember, MFLAG_CAN_BE_SEEN);
+                                       }
+                               }
+
+                               if (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_VIDEO) && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY) {
                                        members_with_video++;
                                }
 
index d301fb5706a71102d6e2b97ff24359dd05253c90..12dc76d6943fdd7587fa4dc8916f4ca05641acd5 100644 (file)
@@ -754,6 +754,7 @@ struct conference_member {
        int good_img;
        int auto_avatar;
        int avatar_patched;
+       switch_media_flow_t video_media_flow;
        mcu_canvas_t *canvas;
        switch_image_t *pcanvas_img;
 };
index 54539868e74b3a0ae92da8fcff194a55cd16e9b3..5d36bdd0a3c1ac851d367ea7bff3df7c932492e2 100644 (file)
@@ -3154,11 +3154,6 @@ static switch_status_t check_ice(switch_media_handle_t *smh, switch_media_type_t
                return SWITCH_STATUS_SUCCESS;
        }
 
-       if (switch_channel_test_flag(smh->session->channel, CF_REINVITE) && !switch_channel_test_flag(smh->session->channel, CF_RECOVERING)) {
-               engine->new_ice = 0;
-               engine->new_dtls = 0;
-       }
-
        engine->ice_in.chosen[0] = 0;
        engine->ice_in.chosen[1] = 0;
        engine->ice_in.is_chosen[0] = 0;
@@ -3595,10 +3590,18 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                switch_channel_clear_flag(smh->session->channel, CF_DTLS);
        }
 
-       a_engine->new_ice = 1;
-       a_engine->new_dtls = 1;
-       v_engine->new_ice = 1;
-       v_engine->new_dtls = 1;
+       /* may have to test for a new dtls fingerprint here too and clear these flags */
+       if (switch_channel_test_flag(smh->session->channel, CF_REINVITE) && !switch_channel_test_flag(smh->session->channel, CF_RECOVERING)) {
+               a_engine->new_ice = 0;
+               a_engine->new_dtls = 0;
+               v_engine->new_ice = 0;
+               v_engine->new_dtls = 0;
+       } else {
+               a_engine->new_ice = 1;
+               a_engine->new_dtls = 1;
+               v_engine->new_ice = 1;
+               v_engine->new_dtls = 1;
+       }
 
        //if (switch_channel_test_flag(session->channel, CF_REINVITE)) {
        //      switch_core_media_clear_ice(session);