]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10138: [freeswitch-core,mod_conference] Add alpha video to conference
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 15 Mar 2017 23:02:46 +0000 (18:02 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 15 Mar 2017 23:02:46 +0000 (18:02 -0500)
src/mod/applications/mod_conference/conference_member.c
src/mod/applications/mod_conference/conference_video.c
src/mod/applications/mod_conference/mod_conference.h

index 03ff78f42df294dd7950098ee5f417d421161b63..cf73621b63c5683ebdc1eb39fabeb47e70c7b7ed 100644 (file)
@@ -1120,6 +1120,10 @@ switch_status_t conference_member_del(conference_obj_t *conference, conference_m
 
        switch_thread_rwlock_wrlock(member->rwlock);
 
+       if (member->video_queue) {
+               conference_video_flush_queue(member->video_queue, 0);
+       }
+
        if (member->session && (exit_sound = switch_channel_get_variable(switch_core_session_get_channel(member->session), "conference_exit_sound"))) {
                conference_file_play(conference, (char *)exit_sound, CONF_DEFAULT_LEADIN,
                                                         switch_core_session_get_channel(member->session), 0);
index 8d8e4935030fdedf122af6d3bf7478c9955ba4cc..6c708450fe54f7f490794ae81891f8c13c1c0411 100644 (file)
@@ -3658,11 +3658,15 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                                switch_img_free(&file_img);
                                                switch_img_fit(&write_frame.img, canvas->img->d_w, canvas->img->d_h, SWITCH_FIT_SIZE);
                                                file_img = write_frame.img;
-                                       
+                                               
                                                if (file_img->fmt == SWITCH_IMG_FMT_ARGB) {
+                                                       switch_image_t *overlay_img = NULL;
+                                                       switch_img_copy(canvas->img, &overlay_img);
+
+                                                       write_img = overlay_img;
                                                        switch_img_patch(write_img, file_img, 0, 0);
                                                        switch_img_free(&file_img);
-                                                       switch_img_copy(write_img, &file_img);
+                                                       file_img = overlay_img;
                                                } else {
                                                        write_img = file_img;
                                                }
index 1b3fcc262380419b68f3015d93d69057aa9ada83..cd5feebeeab6535ac865ccdf677d8bc0823114bd 100644 (file)
@@ -1149,6 +1149,7 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
 void conference_event_chat_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id);
 
 void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conference_api_member_cmd_t pfncallback, void *data);
+int conference_video_flush_queue(switch_queue_t *q, int min);
 
 switch_status_t conference_api_sub_mute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
 switch_status_t conference_api_sub_tmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);