mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
commit
220e773915
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue