From: Anthony Minessale Date: Tue, 29 Mar 2016 23:41:43 +0000 (-0500) Subject: FS-8993 #resolve [Sync issues on conference playback of video that is faster frame... X-Git-Tag: v1.6.7^2~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc0a062204cb51311619cd37f51b32b2f266729f;p=thirdparty%2Ffreeswitch.git FS-8993 #resolve [Sync issues on conference playback of video that is faster frame rate than the conference] --- diff --git a/src/mod/applications/mod_av/avformat.c b/src/mod/applications/mod_av/avformat.c index e378f7911f..4220c7b861 100644 --- a/src/mod/applications/mod_av/avformat.c +++ b/src/mod/applications/mod_av/avformat.c @@ -2134,6 +2134,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f switch_status_t status = SWITCH_STATUS_SUCCESS; double fl_to = 0.02; int do_fl = 0; + int smaller_ts = context->read_fps; if (!context->has_video) return SWITCH_STATUS_FALSE; @@ -2141,7 +2142,11 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f return SWITCH_STATUS_BREAK; } - fl_to = (1000 / context->read_fps) * 1000; + if (handle->mm.fps > 0 && handle->mm.fps < smaller_ts) { + smaller_ts = handle->mm.fps; + } + + fl_to = (1000 / smaller_ts) * 1000; //printf("WTF %d (%f)\n",switch_queue_size(context->eh.video_queue), fl_to); if (flags & SVR_FLUSH) { max_delta = fl_to; @@ -2271,10 +2276,10 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f if (pts == 0 || context->video_start_time == 0) mst->next_pts = 0; if ((mst->next_pts && (now - mst->next_pts) > max_delta)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "picture is too late, off: %" SWITCH_INT64_T_FMT " max delta: %" SWITCH_INT64_T_FMT " queue size:%u\n", (int64_t)(now - mst->next_pts), max_delta, switch_queue_size(context->eh.video_queue)); + //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "picture is too late, off: %" SWITCH_INT64_T_FMT " max delta: %" SWITCH_INT64_T_FMT " queue size:%u fps:%u/%0.2f\n", (int64_t)(now - mst->next_pts), max_delta, switch_queue_size(context->eh.video_queue), context->read_fps, handle->mm.fps); switch_img_free(&img); - max_delta = AV_TIME_BASE; - + //max_delta = AV_TIME_BASE; + if (switch_queue_size(context->eh.video_queue) > 0) { // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "WTF again\n"); goto again; @@ -2282,7 +2287,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f mst->next_pts = 0; context->video_start_time = 0; return SWITCH_STATUS_BREAK; - } + } } if ((flags & SVR_BLOCK) || do_fl) {