[FFmpeg-cvslog] mfenc: Fall back to avctx->time_base if avctx->framerate isn't set
Martin Storsjö
git at videolan.org
Fri May 22 21:57:37 EEST 2020
ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Wed May 20 23:08:17 2020 +0300| [c116c127f9ccd18ff3cf038cfb65a284b01fe720] | committer: Martin Storsjö
mfenc: Fall back to avctx->time_base if avctx->framerate isn't set
The framerate field is the one users are supposed to set, but not
all users might be setting it, so it might be good to fall back
time_base in that case.
Signed-off-by: Martin Storsjö <martin at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c116c127f9ccd18ff3cf038cfb65a284b01fe720
---
libavcodec/mfenc.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/libavcodec/mfenc.c b/libavcodec/mfenc.c
index edee0510b2..83f26b3cc6 100644
--- a/libavcodec/mfenc.c
+++ b/libavcodec/mfenc.c
@@ -637,11 +637,19 @@ static int64_t mf_encv_output_score(AVCodecContext *avctx, IMFMediaType *type)
static int mf_encv_output_adjust(AVCodecContext *avctx, IMFMediaType *type)
{
MFContext *c = avctx->priv_data;
+ AVRational framerate;
ff_MFSetAttributeSize((IMFAttributes *)type, &MF_MT_FRAME_SIZE, avctx->width, avctx->height);
IMFAttributes_SetUINT32(type, &MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
- ff_MFSetAttributeRatio((IMFAttributes *)type, &MF_MT_FRAME_RATE, avctx->framerate.num, avctx->framerate.den);
+ if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
+ framerate = avctx->framerate;
+ } else {
+ framerate = av_inv_q(avctx->time_base);
+ framerate.den *= avctx->ticks_per_frame;
+ }
+
+ ff_MFSetAttributeRatio((IMFAttributes *)type, &MF_MT_FRAME_RATE, framerate.num, framerate.den);
// (MS HEVC supports eAVEncH265VProfile_Main_420_8 only.)
if (avctx->codec_id == AV_CODEC_ID_H264) {
More information about the ffmpeg-cvslog
mailing list