[FFmpeg-devel] [PATCH 1/2] fftools/ffmpeg: Refine the do_video_out.
Jun Zhao
mypopydev at gmail.com
Thu Nov 8 17:35:20 EET 2018
Signed-off-by: Jun Zhao <mypopydev at gmail.com>
---
fftools/ffmpeg.c | 62 ++++++++++++++++++++++++-----------------------------
1 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index da4259a..e989e7a 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1193,33 +1193,27 @@ static void do_video_out(OutputFile *of,
}
ost->last_dropped = nb_frames == nb0_frames && next_picture;
- /* duplicates frame if needed */
- for (i = 0; i < nb_frames; i++) {
- AVFrame *in_picture;
- av_init_packet(&pkt);
- pkt.data = NULL;
- pkt.size = 0;
-
- if (i < nb0_frames && ost->last_frame) {
- in_picture = ost->last_frame;
- } else
- in_picture = next_picture;
+ /* duplicates frame if needed */
+ for (i = 0; i < nb_frames; i++) {
+ AVFrame *in_picture;
+ int forced_keyframe = 0;
+ double pts_time;
+ av_init_packet(&pkt);
+ pkt.data = NULL;
+ pkt.size = 0;
- if (!in_picture)
- return;
+ if (i < nb0_frames && ost->last_frame) {
+ in_picture = ost->last_frame;
+ } else
+ in_picture = next_picture;
- in_picture->pts = ost->sync_opts;
+ if (!in_picture)
+ return;
-#if 1
- if (!check_recording_time(ost))
-#else
- if (ost->frame_number >= ost->max_frames)
-#endif
- return;
+ in_picture->pts = ost->sync_opts;
- {
- int forced_keyframe = 0;
- double pts_time;
+ if (!check_recording_time(ost))
+ return;
if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&
ost->top_field_first >= 0)
@@ -1328,18 +1322,18 @@ static void do_video_out(OutputFile *of,
fprintf(ost->logfile, "%s", enc->stats_out);
}
}
- }
- ost->sync_opts++;
- /*
- * For video, number of frames in == number of packets out.
- * But there may be reordering, so we can't throw away frames on encoder
- * flush, we need to limit them here, before they go into encoder.
- */
- ost->frame_number++;
- if (vstats_filename && frame_size)
- do_video_stats(ost, frame_size);
- }
+ ost->sync_opts++;
+ /*
+ * For video, number of frames in == number of packets out.
+ * But there may be reordering, so we can't throw away frames on encoder
+ * flush, we need to limit them here, before they go into encoder.
+ */
+ ost->frame_number++;
+
+ if (vstats_filename && frame_size)
+ do_video_stats(ost, frame_size);
+ }
if (!ost->last_frame)
ost->last_frame = av_frame_alloc();
--
1.7.1
More information about the ffmpeg-devel
mailing list