]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9808 #resolve [mod_png issue when used with ivr as video input]
authorBrian West <brian@freeswitch.org>
Tue, 13 Dec 2016 15:32:02 +0000 (09:32 -0600)
committerBrian West <brian@freeswitch.org>
Tue, 13 Dec 2016 15:32:02 +0000 (09:32 -0600)
src/mod/formats/mod_png/mod_png.c
src/switch_core_media.c

index a7edbdf1298fc3069e365bba386db4d44f3246b4..0b5066d1cc844f8b70c5dc20e77dda7cff5fcfd8 100644 (file)
@@ -50,6 +50,7 @@ struct png_file_context {
        int max;
        int samples;
        switch_file_handle_t *audio_fh;
+       int done;
 };
 
 typedef struct png_file_context png_file_context_t;
@@ -144,6 +145,8 @@ static switch_status_t png_file_close(switch_file_handle_t *handle)
        
        if (context->audio_fh) switch_core_file_close(context->audio_fh);
 
+       context->done = 1;
+
        return SWITCH_STATUS_SUCCESS;
 }
 
@@ -152,6 +155,10 @@ static switch_status_t png_file_read(switch_file_handle_t *handle, void *data, s
 
        png_file_context_t *context = (png_file_context_t *)handle->private_info;
 
+       if (context->done) {
+               return SWITCH_STATUS_FALSE;
+       }
+
        if (context->audio_fh) {
                return switch_core_file_read(context->audio_fh, data, len);
        }
@@ -183,6 +190,10 @@ static switch_status_t png_file_read_video(switch_file_handle_t *handle, switch_
        switch_image_t *dup = NULL;
        int have_frame = 0;
 
+       if (context->done) {
+               return SWITCH_STATUS_FALSE;
+       }
+
        if ((flags & SVR_CHECK)) {
                return SWITCH_STATUS_BREAK;
        }
index 2af8157d6f980a3ec7ddd8e97fb42a1395aaf282..1c785dc76ab69bf2d49aab4b3f006394928477eb 100644 (file)
@@ -6081,7 +6081,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_set_video_file(switch_core_ses
                switch_mutex_unlock(v_engine->mh.file_read_mutex);
 
        } else {
+               if (!fh && smh->video_write_thread) {
+                       if (smh->video_write_thread_running > 0) {
+                               smh->video_write_thread_running = -1;
+                       }
+               }
+
                switch_mutex_lock(v_engine->mh.file_write_mutex);
+
                if (fh && smh->video_write_fh) {
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "File is already open\n");
                        smh->video_write_fh = fh;