diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index db6d397068..602436da63 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1535,8 +1535,23 @@ static int submit_frame(QSVEncContext *q, const AVFrame *frame, qf->surface.Data.PitchLow = qf->frame->linesize[0]; qf->surface.Data.Y = qf->frame->data[0]; qf->surface.Data.UV = qf->frame->data[1]; - } + /* The SDK checks Data.V when using system memory for VP9 encoding */ + switch (frame->format) { + case AV_PIX_FMT_NV12: + qf->surface.Data.V = qf->surface.Data.UV + 1; + break; + + case AV_PIX_FMT_P010: + qf->surface.Data.V = qf->surface.Data.UV + 2; + break; + + default: + /* should not reach here */ + av_assert0(0); + break; + } + } qf->surface.Data.TimeStamp = av_rescale_q(frame->pts, q->avctx->time_base, (AVRational){1, 90000}); *new_frame = qf;