Re: [libav-devel] [PATCH 08/11] qsvdec: use the same mfxFrameInfo for allocating frames that was passed to DECODE_Init

2016-06-25 Thread Vittorio Giovara
On Sat, Jun 25, 2016 at 10:27 AM, Anton Khirnov  wrote:
> Stop duplicating this information.
> ---
>  libavcodec/qsvdec.c | 15 ++-
>  libavcodec/qsvdec.h |  1 +
>  2 files changed, 7 insertions(+), 9 deletions(-)

probably ok
-- 
Vittorio
___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel


[libav-devel] [PATCH 08/11] qsvdec: use the same mfxFrameInfo for allocating frames that was passed to DECODE_Init

2016-06-25 Thread Anton Khirnov
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 2b01d34..02d5e28 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  = >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 de66a7d..d807864 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;
-- 
2.0.0

___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel