]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7513: fix queued video playbacks
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 7 Apr 2015 16:43:19 +0000 (11:43 -0500)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:47:16 +0000 (12:47 -0500)
src/mod/applications/mod_conference/mod_conference.c

index df3b16a2b8cc14c6c466901c2336e9c3ea8c84fb..e4b2c50d09580c6b025dbeaef4a911932458fbc0 100644 (file)
@@ -4655,6 +4655,24 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
        return SWITCH_STATUS_SUCCESS;
 }
 
+static void fnode_check_video(conference_obj_t *conference, conference_file_node_t *fnode) {
+
+       if (switch_core_file_has_video(&fnode->fh)) {
+               int full_screen = 0;
+               
+               if (fnode->fh.params) {
+                       full_screen = switch_true(switch_event_get_header(fnode->fh.params, "full-screen"));
+               }
+               
+               if (full_screen) {
+                       conference->canvas->play_file = 1;
+                       conference->playing_video_file = 1;
+               } else {
+                       canvas_set_fnode_layer(conference, fnode, -1);
+               }
+       }
+}
+
 static void conference_command_handler(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data)
 {
 }
@@ -5105,6 +5123,11 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, v
                        fnode = conference->fnode;
                        conference->fnode = conference->fnode->next;
 
+                       if (conference->fnode) {
+                               fnode_check_video(conference, conference->fnode);
+                       }
+
+
                        pool = fnode->pool;
                        fnode = NULL;
                        switch_core_destroy_memory_pool(&pool);
@@ -7158,8 +7181,6 @@ static void canvas_set_fnode_layer(conference_obj_t *conference, conference_file
        switch_mutex_unlock(conference->canvas->mutex);
 }
 
-
-
 /* Play a file in the conference room */
 static switch_status_t conference_play_file(conference_obj_t *conference, char *file, uint32_t leadin, switch_channel_t *channel, uint8_t async)
 {
@@ -7312,20 +7333,9 @@ static switch_status_t conference_play_file(conference_obj_t *conference, char *
        fnode->pool = pool;
        fnode->async = async;
        fnode->file = switch_core_strdup(fnode->pool, file);
-
-       if (switch_core_file_has_video(&fnode->fh)) {
-               int full_screen = 0;
-
-               if (fnode->fh.params) {
-                       full_screen = switch_true(switch_event_get_header(fnode->fh.params, "full-screen"));
-               }
-               
-               if (full_screen) {
-                       conference->canvas->play_file = 1;
-                       conference->playing_video_file = 1;
-               } else {
-                       canvas_set_fnode_layer(conference, fnode, -1);
-               }
+       
+       if (!conference->fnode || (async && !conference->async_fnode)) {
+               fnode_check_video(conference, fnode);
        }
 
        /* Queue the node */