diff --git a/ffmpeg.c b/ffmpeg.c index e0c7cb14b4..4042bb77c3 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -555,16 +555,18 @@ static void do_video_out(AVFormatContext *s, if (ost->sync_ipts != AV_NOPTS_VALUE) { vdelta = (double)(ost->st->pts.val) * s->pts_num / s->pts_den - (ost->sync_ipts - ost->sync_ipts_offset); - if (vdelta < 100 && vdelta > -100) { + if (vdelta < 100 && vdelta > -100 && ost->sync_ipts_offset) { if (vdelta < -AV_DELAY_MAX) nb_frames = 2; else if (vdelta > AV_DELAY_MAX) nb_frames = 0; } else { ost->sync_ipts_offset -= vdelta; + if (!ost->sync_ipts_offset) + ost->sync_ipts_offset = 0.000001; /* one microsecond */ } -#if 0 +#if defined(PJSG) { static char *action[] = { "drop frame", "copy frame", "dup frame" }; printf("Input PTS %12.6f, output PTS %12.6f: %s\n", @@ -1369,6 +1371,7 @@ static int av_encode(AVFormatContext **output_files, //printf("ipts=%lld sync_ipts=%f sync_opts=%lld pts.val=%lld pkt.pts=%lld\n", ipts, ost->sync_ipts, ost->sync_opts, ost->st->pts.val, pkt.pts); } else { //printf("pts.val=%lld\n", ost->st->pts.val); + ost->sync_ipts = AV_NOPTS_VALUE; } if (ost->encoding_needed) {