Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2016-11-14 17:19:51 +0300
committerHendrik Leppkes <h.leppkes@gmail.com>2016-11-14 17:19:51 +0300
commit220e77391552a61d515a1d8c2b17afd876958613 (patch)
treec368e03a35fe4dfd83767e6300dcb6c1fa5b4326 /libavcodec/qsvdec.c
parent1bc6cdf2fcbd3caea7b78d0a617c6e338606d756 (diff)
parentce320cf1c4daab3e2e3726ed7d2e879d10f7b991 (diff)
Merge commit 'ce320cf1c4daab3e2e3726ed7d2e879d10f7b991'
* commit 'ce320cf1c4daab3e2e3726ed7d2e879d10f7b991': qsvdec: use the same mfxFrameInfo for allocating frames that was passed to DECODE_Init Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
Diffstat (limited to 'libavcodec/qsvdec.c')
-rw-r--r--libavcodec/qsvdec.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 9d3a6dac6d..e166336548 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -176,10 +176,12 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
return ff_qsv_error(ret);
}
+ q->frame_info = param.mfx.FrameInfo;
+
return 0;
}
-static int alloc_frame(AVCodecContext *avctx, QSVFrame *frame)
+static int alloc_frame(AVCodecContext *avctx, QSVContext *q, QSVFrame *frame)
{
int ret;
@@ -190,12 +192,7 @@ static int alloc_frame(AVCodecContext *avctx, QSVFrame *frame)
if (frame->frame->format == AV_PIX_FMT_QSV) {
frame->surface = (mfxFrameSurface1*)frame->frame->data[3];
} else {
- frame->surface_internal.Info.BitDepthLuma = 8;
- frame->surface_internal.Info.BitDepthChroma = 8;
- frame->surface_internal.Info.FourCC = MFX_FOURCC_NV12;
- frame->surface_internal.Info.Width = avctx->coded_width;
- frame->surface_internal.Info.Height = avctx->coded_height;
- frame->surface_internal.Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+ frame->surface_internal.Info = q->frame_info;
frame->surface_internal.Data.PitchLow = frame->frame->linesize[0];
frame->surface_internal.Data.Y = frame->frame->data[0];
@@ -230,7 +227,7 @@ static int get_surface(AVCodecContext *avctx, QSVContext *q, mfxFrameSurface1 **
last = &q->work_frames;
while (frame) {
if (!frame->surface) {
- ret = alloc_frame(avctx, frame);
+ ret = alloc_frame(avctx, q, frame);
if (ret < 0)
return ret;
*surf = frame->surface;
@@ -251,7 +248,7 @@ static int get_surface(AVCodecContext *avctx, QSVContext *q, mfxFrameSurface1 **
}
*last = frame;
- ret = alloc_frame(avctx, frame);
+ ret = alloc_frame(avctx, q, frame);
if (ret < 0)
return ret;