diff --git a/src/mod/formats/mod_png/mod_png.c b/src/mod/formats/mod_png/mod_png.c index a7edbdf129..0b5066d1cc 100644 --- a/src/mod/formats/mod_png/mod_png.c +++ b/src/mod/formats/mod_png/mod_png.c @@ -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; } diff --git a/src/switch_core_media.c b/src/switch_core_media.c index 8258c136bc..c88cf5d924 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -5515,7 +5515,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;