Fixes bug #7839
https://trac.ffmpeg.org/ticket/7839
Supersedes:
#12935 - https://patchwork.ffmpeg.org/patch/12935/
#12872 - https://patchwork.ffmpeg.org/patch/12872/
Regards.
A.H.
---
From 49aa7d21026051dc353a8658509d2ba81520bf78 Mon Sep 17 00:00:00 2001
From: Andreas Hakon <andreas.ha...@protonmail.com>
Date: Tue, 14 May 2019 16:42:08 +0100
Subject: [PATCH] libavcodec/qsvenc: fix mpeg2 encoding
Commit "lavc/qsvenc: enable QVBR mode" generated a regression with the MPEG-2
QSV HW Encoder on the Windows platform. See trac #7839.
This patch fixes the problem by running a runtime check during initialization.
When using the MPEG-2 encoder the extended CO3 buffer is not added to the
context.
Signed-off-by: Andreas Hakon <andreas.ha...@protonmail.com>
---
libavcodec/qsvenc.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index a03ab69..9d26db0 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -267,10 +267,12 @@ static void dump_video_param(AVCodecContext *avctx,
QSVEncContext *q,
#endif
#endif
+#if QSV_HAVE_CO3
#if QSV_HAVE_GPB
if (avctx->codec_id == AV_CODEC_ID_HEVC)
av_log(avctx, AV_LOG_VERBOSE,"GPB: %s\n", print_threestate(co3->GPB));
#endif
+#endif
if (avctx->codec_id == AV_CODEC_ID_H264) {
av_log(avctx, AV_LOG_VERBOSE, "Entropy coding: %s;
MaxDecFrameBuffering: %"PRIu16"\n",
@@ -598,9 +600,11 @@ static int init_video_param(AVCodecContext *avctx,
QSVEncContext *q)
q->param.mfx.MaxKbps = max_bitrate_kbps /
brc_param_multiplier;
q->param.mfx.BRCParamMultiplier = brc_param_multiplier;
#if QSV_HAVE_QVBR
+#if QSV_HAVE_CO3
if (q->param.mfx.RateControlMethod == MFX_RATECONTROL_QVBR)
q->extco3.QVBRQuality = av_clip(avctx->global_quality, 0, 51);
#endif
+#endif
break;
case MFX_RATECONTROL_CQP:
quant = avctx->global_quality / FF_QP2LAMBDA;
@@ -751,13 +755,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
#endif
}
#if QSV_HAVE_CO3
- q->extco3.Header.BufferId = MFX_EXTBUFF_CODING_OPTION3;
- q->extco3.Header.BufferSz = sizeof(q->extco3);
+ if (avctx->codec_id != AV_CODEC_ID_MPEG2VIDEO ) {
+ av_log(avctx,AV_LOG_DEBUG,"Initializing the MFX context with the
Extended Coding Option 3 (extco3)\n");
+ q->extco3.Header.BufferId = MFX_EXTBUFF_CODING_OPTION3;
+ q->extco3.Header.BufferSz = sizeof(q->extco3);
#if QSV_HAVE_GPB
- if (avctx->codec_id == AV_CODEC_ID_HEVC)
- q->extco3.GPB = q->gpb ? MFX_CODINGOPTION_ON :
MFX_CODINGOPTION_OFF;
+ if (avctx->codec_id == AV_CODEC_ID_HEVC)
+ q->extco3.GPB = q->gpb ? MFX_CODINGOPTION_ON :
MFX_CODINGOPTION_OFF;
#endif
- q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer
*)&q->extco3;
+ q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer
*)&q->extco3;
+ }
#endif
}
--
1.7.10.4
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".