From 0a4b3d073d584dfa966172cb026606fd018d901f Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 22 Jun 2016 11:44:09 +0200 Subject: qsvdec: use the same mfxFrameInfo for allocating frames that was passed to DECODE_Init Stop duplicating this information. --- libavcodec/qsvdec.c | 15 ++++++--------- libavcodec/qsvdec.h | 1 + 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 2b01d34624..02d5e282ea 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -155,10 +155,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; @@ -169,12 +171,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]; @@ -209,7 +206,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; @@ -230,7 +227,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; diff --git a/libavcodec/qsvdec.h b/libavcodec/qsvdec.h index de66a7d1de..d807864aa5 100644 --- a/libavcodec/qsvdec.h +++ b/libavcodec/qsvdec.h @@ -57,6 +57,7 @@ typedef struct QSVContext { AVCodecContext *avctx_internal; enum AVPixelFormat orig_pix_fmt; uint32_t fourcc; + mfxFrameInfo frame_info; // options set by the caller int async_depth; -- cgit v1.2.3