summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-06-22 11:57:36 +0200
committerAnton Khirnov <anton@khirnov.net>2016-07-03 09:13:29 +0200
commit924e2ecd2b7d51cca60c79351ef16b04dd4245c3 (patch)
tree649817b92998585f8f7c2fafb1cf74002cb7f878
parent92736c74fb1633e36f7134a880422a9b7db14d3f (diff)
qsvdec: when a frames ctx is supplied, use its frame dimensions
The allocated frame size may be larger than the coded dimensions.
-rw-r--r--libavcodec/qsvdec.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 929b9af426..5b36489677 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -91,6 +91,8 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
mfxSession session = NULL;
int iopattern = 0;
mfxVideoParam param = { { 0 } };
+ int frame_width = avctx->coded_width;
+ int frame_height = avctx->coded_height;
int ret;
desc = av_pix_fmt_desc_get(avctx->sw_pix_fmt);
@@ -122,6 +124,9 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
else if (frames_hwctx->frame_type & MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET)
iopattern = MFX_IOPATTERN_OUT_VIDEO_MEMORY;
}
+
+ frame_width = frames_hwctx->surfaces[0].Info.Width;
+ frame_height = frames_hwctx->surfaces[0].Info.Height;
}
if (!iopattern)
@@ -146,8 +151,8 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
param.mfx.FrameInfo.BitDepthChroma = desc->comp[0].depth;
param.mfx.FrameInfo.Shift = desc->comp[0].depth > 8;
param.mfx.FrameInfo.FourCC = q->fourcc;
- param.mfx.FrameInfo.Width = avctx->coded_width;
- param.mfx.FrameInfo.Height = avctx->coded_height;
+ param.mfx.FrameInfo.Width = frame_width;
+ param.mfx.FrameInfo.Height = frame_height;
param.mfx.FrameInfo.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
param.IOPattern = q->iopattern;