diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-06-22 11:44:09 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-06-29 12:15:14 +0200 |
commit | 0a4b3d073d584dfa966172cb026606fd018d901f (patch) | |
tree | b7b3e11ec4572527ce838be770d330ab93c09884 | |
parent | 3f7c1897fa6efa1f7dc944c7b1fd5bf32d6f233b (diff) |
qsvdec: use the same mfxFrameInfo for allocating frames that was passed to DECODE_Init
Stop duplicating this information.
-rw-r--r-- | libavcodec/qsvdec.c | 15 | ||||
-rw-r--r-- | 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; |