diff options
author | Ivan Uskov <ivan.uskov@nablet.com> | 2015-07-04 15:33:26 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-07-06 15:13:08 +0200 |
commit | 38402754b97745125b25d38bf525fe46cace9370 (patch) | |
tree | 2b1189a71af6fc8934c674ce62b9d28d43f23ba8 | |
parent | 859731d64271f4b30b1ceb9412092023d5991b1d (diff) | |
download | ffmpeg-38402754b97745125b25d38bf525fe46cace9370.tar.gz |
libavcodec/qsvenc.c: More correct selection of alignment of a frame height depending whether an encoded sequence progressive or not.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/qsvenc.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index bcf3d73c58..f3008c0fe3 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -65,18 +65,29 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->param.mfx.BufferSizeInKB = 0; q->param.mfx.FrameInfo.FourCC = MFX_FOURCC_NV12; - q->param.mfx.FrameInfo.Width = FFALIGN(avctx->width, 16); - q->param.mfx.FrameInfo.Height = FFALIGN(avctx->height, 32); q->param.mfx.FrameInfo.CropX = 0; q->param.mfx.FrameInfo.CropY = 0; q->param.mfx.FrameInfo.CropW = avctx->width; q->param.mfx.FrameInfo.CropH = avctx->height; q->param.mfx.FrameInfo.AspectRatioW = avctx->sample_aspect_ratio.num; q->param.mfx.FrameInfo.AspectRatioH = avctx->sample_aspect_ratio.den; - q->param.mfx.FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; q->param.mfx.FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420; q->param.mfx.FrameInfo.BitDepthLuma = 8; q->param.mfx.FrameInfo.BitDepthChroma = 8; + q->param.mfx.FrameInfo.Width = FFALIGN(avctx->width, 16); + + if (avctx->flags & CODEC_FLAG_INTERLACED_DCT) { + /* A true field layout (TFF or BFF) is not important here, + it will specified later during frame encoding. But it is important + to specify is frame progressive or not because allowed heigh alignment + does depend by this. + */ + q->param.mfx.FrameInfo.PicStruct = MFX_PICSTRUCT_FIELD_TFF; + q->param.mfx.FrameInfo.Height = FFALIGN(avctx->height, 32); + } else { + q->param.mfx.FrameInfo.PicStruct = MFX_PICSTRUCT_PROGRESSIVE; + q->param.mfx.FrameInfo.Height = FFALIGN(avctx->height, 16); + } if (avctx->framerate.den > 0 && avctx->framerate.num > 0) { q->param.mfx.FrameInfo.FrameRateExtN = avctx->framerate.num; |