[FFmpeg-cvslog] avconv: initialize output framerate earlier
Anton Khirnov
git at videolan.org
Wed Sep 28 19:02:57 EEST 2016
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon May 23 16:52:28 2016 +0200| [5fa255b65c7887cc913f097aed1b581fbf1a8745] | committer: Anton Khirnov
avconv: initialize output framerate earlier
This will be needed in the following commits.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5fa255b65c7887cc913f097aed1b581fbf1a8745
---
avconv.c | 34 ----------------------------------
avconv_opt.c | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/avconv.c b/avconv.c
index d7365f3..74de3ac 100644
--- a/avconv.c
+++ b/avconv.c
@@ -1954,40 +1954,6 @@ static int transcode_init(void)
enc_ctx->chroma_sample_location = dec_ctx->chroma_sample_location;
}
- /*
- * We want CFR output if and only if one of those is true:
- * 1) user specified output framerate with -r
- * 2) user specified -vsync cfr
- * 3) output format is CFR and the user didn't force vsync to
- * something else than CFR
- *
- * in such a case, set ost->frame_rate
- */
- if (enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO &&
- !ost->frame_rate.num && ist &&
- (video_sync_method == VSYNC_CFR ||
- (video_sync_method == VSYNC_AUTO &&
- !(oc->oformat->flags & (AVFMT_NOTIMESTAMPS | AVFMT_VARIABLE_FPS))))) {
- if (ist->framerate.num)
- ost->frame_rate = ist->framerate;
- else if (ist->st->avg_frame_rate.num)
- ost->frame_rate = ist->st->avg_frame_rate;
- else {
- av_log(NULL, AV_LOG_WARNING, "Constant framerate requested "
- "for the output stream #%d:%d, but no information "
- "about the input framerate is available. Falling "
- "back to a default value of 25fps. Use the -r option "
- "if you want a different framerate.\n",
- ost->file_index, ost->index);
- ost->frame_rate = (AVRational){ 25, 1 };
- }
-
- if (ost->enc && ost->enc->supported_framerates && !ost->force_fps) {
- int idx = av_find_nearest_q_idx(ost->frame_rate, ost->enc->supported_framerates);
- ost->frame_rate = ost->enc->supported_framerates[idx];
- }
- }
-
#if CONFIG_LIBMFX
if (qsv_transcode_init(ost))
exit_program(1);
diff --git a/avconv_opt.c b/avconv_opt.c
index eab79f2..2a4f71a 100644
--- a/avconv_opt.c
+++ b/avconv_opt.c
@@ -1767,6 +1767,48 @@ loop_end:
}
}
}
+
+ /*
+ * We want CFR output if and only if one of those is true:
+ * 1) user specified output framerate with -r
+ * 2) user specified -vsync cfr
+ * 3) output format is CFR and the user didn't force vsync to
+ * something else than CFR
+ *
+ * in such a case, set ost->frame_rate
+ */
+ if (ost->encoding_needed && ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO) {
+ int format_cfr = !(oc->oformat->flags & (AVFMT_NOTIMESTAMPS | AVFMT_VARIABLE_FPS));
+ int need_cfr = !!ost->frame_rate.num;
+
+ if (video_sync_method == VSYNC_CFR ||
+ (video_sync_method == VSYNC_AUTO && format_cfr))
+ need_cfr = 1;
+
+ if (need_cfr && !ost->frame_rate.num) {
+ InputStream *ist = ost->source_index >= 0 ? input_streams[ost->source_index] : NULL;
+
+ if (ist && ist->framerate.num)
+ ost->frame_rate = ist->framerate;
+ else if (ist && ist->st->avg_frame_rate.num)
+ ost->frame_rate = ist->st->avg_frame_rate;
+ else {
+ av_log(NULL, AV_LOG_WARNING, "Constant framerate requested "
+ "for the output stream #%d:%d, but no information "
+ "about the input framerate is available. Falling "
+ "back to a default value of 25fps. Use the -r option "
+ "if you want a different framerate.\n",
+ ost->file_index, ost->index);
+ ost->frame_rate = (AVRational){ 25, 1 };
+ }
+ }
+
+ if (need_cfr && ost->enc->supported_framerates && !ost->force_fps) {
+ int idx = av_find_nearest_q_idx(ost->frame_rate, ost->enc->supported_framerates);
+ ost->frame_rate = ost->enc->supported_framerates[idx];
+ }
+ }
+
}
/* check filename in case of an image number is expected */
More information about the ffmpeg-cvslog
mailing list