lavc/qsvenc: set base address for V plane

The SDK checks Data.V when using system memory for VP9 encoding. This
fixed the error below:

$ ffmpeg -qsv_device /dev/dri/renderD129 -f lavfi -i yuvtestsrc -c:v
vp9_qsv -f null -

[vp9_qsv @ 0x55b8387cbe90] Error during encoding: NULL pointer (-2)
Video encoding failed

Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
Haihao Xiang 2021-12-13 14:40:55 +08:00
parent a428949775
commit 0d82613b7d
1 changed files with 16 additions and 1 deletions

View File

@ -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;