]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10076: [mod_av] File sync issues with different framerates #resolve
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 28 Feb 2017 23:44:16 +0000 (17:44 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 28 Feb 2017 23:44:16 +0000 (17:44 -0600)
src/mod/applications/mod_av/avformat.c

index e094aea751bd6f5a5fff3a52fd25683fd23b68e2..2d2086d178bff305ea43348a883216634980ebb8 100644 (file)
@@ -2291,6 +2291,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
                return SWITCH_STATUS_BREAK;
        }
 
+#if 0
        if (context->last_img) {
                if (mst->next_pts && (switch_time_now() - mst->next_pts > max_delta)) {
                        switch_img_free(&context->last_img); // too late
@@ -2311,6 +2312,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
                        return SWITCH_STATUS_BREAK;
                }
        }
+#endif
 
        if (st->codec->time_base.num) {
                ticks = st->parser ? st->parser->repeat_pict + 1 : st->codec->ticks_per_frame;
@@ -2325,10 +2327,16 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
 
  again:
 
-       if ((flags & SVR_BLOCK)) {
-               status = switch_queue_pop(context->eh.video_queue, &pop);
+       if (context->last_img) {
+               pop = (void *) context->last_img;
+               context->last_img = NULL;
+               status = SWITCH_STATUS_SUCCESS;
        } else {
-               status = switch_queue_trypop(context->eh.video_queue, &pop);
+               if ((flags & SVR_BLOCK)) {
+                       status = switch_queue_pop(context->eh.video_queue, &pop);
+               } else {
+                       status = switch_queue_trypop(context->eh.video_queue, &pop);
+               }
        }
 
        if (pop && status == SWITCH_STATUS_SUCCESS) {
@@ -2371,7 +2379,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
                        }
                }
 
-               if ((flags & SVR_BLOCK) || do_fl) {
+               if ((flags & SVR_BLOCK)) {
                        while (switch_micro_time_now() - mst->next_pts < -10000) {
                                // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "yield, delta=%" SWITCH_INT64_T_FMT "\n", switch_micro_time_now() - mst->next_pts);
                                switch_yield(1000);